]> granicus.if.org Git - clang/commitdiff
Use KEY_WOW64_32KEY when reading the registry in WindowsToolChain.cpp (PR17033)
authorHans Wennborg <hans@hanshq.net>
Wed, 9 Oct 2013 23:41:48 +0000 (23:41 +0000)
committerHans Wennborg <hans@hanshq.net>
Wed, 9 Oct 2013 23:41:48 +0000 (23:41 +0000)
This exposes a 32-bit view of the registry even when Clang is built as a 64-bit
program. Since Visual Studio is a 32-bit application, this is necessary for us
to find it.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192331 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/WindowsToolChain.cpp

index 3cbb5c83df9120d27ac3f2bb99535fa690b502a4..ad84d02f5981f712463422c267c6a3792996db9b 100644 (file)
@@ -126,7 +126,8 @@ static bool getSystemRegistryString(const char *keyPath, const char *valueName,
     strncpy(partialKey, subKey, partialKeyLength);
     partialKey[partialKeyLength] = '\0';
     HKEY hTopKey = NULL;
-    lResult = RegOpenKeyEx(hRootKey, partialKey, 0, KEY_READ, &hTopKey);
+    lResult = RegOpenKeyEx(hRootKey, partialKey, 0, KEY_READ | KEY_WOW64_32KEY,
+                           &hTopKey);
     if (lResult == ERROR_SUCCESS) {
       char keyName[256];
       int bestIndex = -1;
@@ -159,7 +160,8 @@ static bool getSystemRegistryString(const char *keyPath, const char *valueName,
         strncat(bestName, nextKey, sizeof(bestName) - 1);
         bestName[sizeof(bestName) - 1] = '\0';
         // Open the chosen key path remainder.
-        lResult = RegOpenKeyEx(hTopKey, bestName, 0, KEY_READ, &hKey);
+        lResult = RegOpenKeyEx(hTopKey, bestName, 0, KEY_READ | KEY_WOW64_32KEY,
+                               &hKey);
         if (lResult == ERROR_SUCCESS) {
           lResult = RegQueryValueEx(hKey, valueName, NULL, &valueType,
             (LPBYTE)value, &valueSize);
@@ -171,7 +173,8 @@ static bool getSystemRegistryString(const char *keyPath, const char *valueName,
       RegCloseKey(hTopKey);
     }
   } else {
-    lResult = RegOpenKeyEx(hRootKey, subKey, 0, KEY_READ, &hKey);
+    lResult = RegOpenKeyEx(hRootKey, subKey, 0, KEY_READ | KEY_WOW64_32KEY,
+                           &hKey);
     if (lResult == ERROR_SUCCESS) {
       lResult = RegQueryValueEx(hKey, valueName, NULL, &valueType,
         (LPBYTE)value, &valueSize);