Wow6432Node
暗示 WOW64 虚拟化。一个 64 位的进程可以直接打开一个 32 位的虚拟化密钥:
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Wow6432Node\\Idontexist", 0, KEY_READ, &hKey);
如果您需要在 32 位和 64 位上运行相同的代码并且都访问Wow6432Node
密钥,则IsWow64Process()
在 32 位代码中使用来检测 WOW64,然后相应地调整代码,例如:
#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
最初不应该存在,并且可能是由未KEY_WOW64_...
正确使用标志的 64 位进程错误地创建的。