KEY_WOW64_32KEY没有从x64应用程序重定向
KEY_WOW64_32KEY not redirecting from x64 application
我有一个x64应用程序在x64操作系统上运行,我试图从x86注册表中读取。
这是我的代码:
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\Idontexist", 0, KEY_READ | KEY_WOW64_32KEY, &hKey);
我想尝试打开HKCUSoftwareWow6432NodeIdontexist,但它打开的是HKCUSoftwareIdontexist。
我在进程监视器中观看,如果我使用KEY_WOW64_64KEY或KEY_WOW64_32KEY,两者都尝试读取HKCUSoftwareIdontexist,而不是HKCUSoftwareWow6432NodeIdontexist。
编辑:操作系统是Windows 7,如果有区别的话
在Windows 7上重定向和反映的密钥在此MSDN页面中有详细说明。由于太大,无法在此复制,但您可以清楚地看到HKCUSoftware密钥(除了Classes子密钥)是共享的,而不是重定向的
Wow6432Node
暗示WOW64虚拟化。64位进程可以直接打开32位虚拟密钥:
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\Wow6432Node\Idontexist", 0, KEY_READ, &hKey);
如果您需要在32位和64位运行相同的代码,并且都访问Wow6432Node
键,那么在32位代码中使用IsWow64Process()
来检测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
。如果目标键被正确地分为32位和64位视图,KEY_WOW64_32KEY
应该可以正常工作:
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_...
标志。
相关文章:
- 通过 COM 对象连接 x64 应用程序时出现问题
- 一个32位版本的应用程序,建立在CentOS 6 x64上,当在较新的Linux上启动时,在"dl_itera
- C DLL通过C#UWP应用程序中的Win运行时组件适用于ARM,但对于X86/X64不适用于
- 我如何将Win32应用程序迁移到X64
- C++:Windows 10 x64 和 Windows 7 x64 上的 MFC 应用程序
- 为什么Folloing代码在2010年Visual Studio(X64应用程序)中抛出非法指令例外
- 在Win7 x64上编译Qt应用程序的最简单方法
- 非常简单的 x64 组装/C++应用程序中未解决的外部错误
- 如何在Windows x64 C++应用程序中捕获堆栈溢出
- 在 Win x64 应用程序中C++加速库
- 如何在Windows 64位计算机中将c++应用程序编译为x64模式
- X64和x32 FreeBSD,内存位置介绍应用程序
- 在c++中使用x64系统和x86应用程序分配大内存
- 在x64系统上使用32位应用程序中的IFilter
- 假设任何x86编译的应用程序总是在x64版本下运行是安全的吗?
- 执行64位应用程序需要Visual studio可重新分发包x64
- Windows 7 x64操作系统下如何确定应用程序文件路径
- 32位Qt应用程序在Windows 7 x64上随机崩溃
- QT 5.6.1应用程序仅在x86 arch上退出插槽后崩溃,而不是x64
- KEY_WOW64_32KEY没有从x64应用程序重定向