Wow6432Node
意味着WOW64虛擬化。 64位進程可以打開直接在32位的虛擬鍵:
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Wow6432Node\\Idontexist", 0, KEY_READ, &hKey);
如果您需要在同一代碼在32位和64位和兩個訪問Wow6432Node
鍵運行,然後在使用IsWow64Process()
32位代碼來檢測WOW64,然後相應adust的代碼,例如:
#ifdef _WIN64
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Wow6432Node\\Idontexist", 0, KEY_READ, &hKey);
#else
BOOL bIsWow64 = FALSE;
IsWow64Process(GetCurrentProcess(), &bIsWow64);
DWORD Wow64Flags = (bIsWow64) ? KEY_WOW64_32KEY : 0;
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Idontexist", 0, KEY_READ | Wow64Flags, &hKey);
#endif
但是,你真的不應該直接訪問Wow6432Node
。 KEY_WOW64_32KEY
應正常工作如果目標關鍵是正確地分爲32位和64位的觀點:
DWORD Wow64Flags;
#ifdef _WIN64
Wow64Flags = KEY_WOW64_32KEY;
#else
BOOL bIsWow64 = FALSE;
IsWow64Process(GetCurrentProcess(), &bIsWow64);
Wow64Flags = (bIsWow64) ? KEY_WOW64_32KEY : 0;
#endif
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Idontexist", 0, KEY_READ | Wow64Flags, &hKey);
如果不工作,比意味着Software\\Wow6432Node\\Idontexist
不應該擺在首位存在,可能是由64位進程錯誤地創建的,該進程沒有正確使用KEY_WOW64_...
標誌。