Wow6432NodeWOW64 仮想化を意味します。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使用していない 64 ビット プロセスによって誤って作成された可能性があります。KEY_WOW64_...