From 1448db9d6f1a1ebe661c8d7b850a255c63002a01 Mon Sep 17 00:00:00 2001 From: nicole mazzuca Date: Thu, 9 Apr 2020 16:33:36 -0700 Subject: [PATCH] [vcpkg-test] Fix the check for ability to make symlinks (#10543) The old check checked to see if the computer was in developer mode _OR_ allowed sideloading apps, but we want _only_ developer mode. --- toolsrc/src/vcpkg-test/files.cpp | 4 +--- toolsrc/src/vcpkg-test/util.cpp | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/toolsrc/src/vcpkg-test/files.cpp b/toolsrc/src/vcpkg-test/files.cpp index d8bc5ba74eb..cbe1e81c3c3 100644 --- a/toolsrc/src/vcpkg-test/files.cpp +++ b/toolsrc/src/vcpkg-test/files.cpp @@ -65,8 +65,6 @@ namespace Width width = Width{5}, CurrentDepth current_depth = CurrentDepth{0}) { - std::random_device rd; - // we want ~70% of our "files" to be directories, and then a third // each of the remaining ~30% to be regular files, directory symlinks, // and regular symlinks @@ -132,7 +130,7 @@ namespace CHECK_EC_ON_FILE(base_link, ec); vcpkg::Test::create_symlink(base_link, base, ec); } - else // type == directory_symlink_tag + else // file_type == directory_symlink_tag { // directory symlink auto parent = base; diff --git a/toolsrc/src/vcpkg-test/util.cpp b/toolsrc/src/vcpkg-test/util.cpp index d754baec1fc..c615f6bb2b9 100644 --- a/toolsrc/src/vcpkg-test/util.cpp +++ b/toolsrc/src/vcpkg-test/util.cpp @@ -114,21 +114,21 @@ namespace vcpkg::Test #elif !defined(_WIN32) // FILESYSTEM_SYMLINK == FILESYSTEM_SYMLINK_STD return AllowSymlinks::Yes; #else - HKEY key; - bool allow_symlinks = true; + constexpr static const wchar_t regkey[] = + LR"(SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock)"; + constexpr static const wchar_t regkey_member[] = LR"(AllowDevelopmentWithoutDevLicense)"; - const auto status = RegOpenKeyExW( - HKEY_LOCAL_MACHINE, LR"(SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock)", 0, 0, &key); + DWORD data; + DWORD dataSize = sizeof(data); + const auto status = RegGetValueW( + HKEY_LOCAL_MACHINE, regkey, regkey_member, RRF_RT_DWORD, nullptr, &data, &dataSize); - if (status == ERROR_FILE_NOT_FOUND) - { - allow_symlinks = false; + if (status == ERROR_SUCCESS && data == 1) { + return AllowSymlinks::Yes; + } else { std::clog << "Symlinks are not allowed on this system\n"; + return AllowSymlinks::No; } - - if (status == ERROR_SUCCESS) RegCloseKey(key); - - return allow_symlinks ? AllowSymlinks::Yes : AllowSymlinks::No; #endif } const static AllowSymlinks CAN_CREATE_SYMLINKS = internal_can_create_symlinks();