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