Sfoglia il codice sorgente

Fix WOW64 registry mode on Windows 2000 (#10759)

CMake fails to find any registry paths on Windows 2000: according to regmon
it fails with an access denied error. I double checked all the access rights
and they are fine. After checking the access modes on MSDN I found that it
says KEY_WOW64_32KEY / KEY_WOW64_64KEY are not supported on Windows 2000.
CMake does not check if the current system supports Wow64 before applying
these flags.

This commit adds a check for IsWow64Process in kernel32.dll before adding
these flags.

Author: Axel Gembe <[email protected]>
Signed-off-by: Axel Gembe <[email protected]>
David Cole 15 anni fa
parent
commit
4b05a21302
1 ha cambiato i file con 8 aggiunte e 0 eliminazioni
  1. 8 0
      Source/kwsys/SystemTools.cxx

+ 8 - 0
Source/kwsys/SystemTools.cxx

@@ -563,6 +563,14 @@ void SystemTools::ReplaceString(kwsys_stl::string& source,
 static DWORD SystemToolsMakeRegistryMode(DWORD mode,
                                          SystemTools::KeyWOW64 view)
 {
+  // only add the modes when on a system that supports Wow64.
+  static void *wow64p = GetProcAddress(GetModuleHandle("kernel32"),
+                                       "IsWow64Process");
+  if(wow64p == NULL)
+    {
+    return mode;
+    }
+
   if(view == SystemTools::KeyWOW64_32)
     {
     return mode | KWSYS_ST_KEY_WOW64_32KEY;