我有一个与资源管理器上下文菜单集成的程序。它在Win32中正常工作,但在Win64中不能正常工作。我已经将shell扩展编译为Win64,但现在我要注册
主程序的DLL文件是32位,我也希望将主程序保持为32位。
我想访问Wow6432Node
下HKEY_CLASS_ROOT
下的CLSID密钥。我使用了RegDisableRef
,但它不起作用
答案 0 :(得分:0)
就像files are redirected by WoW64一样,注册表访问也被重定向
注册表重定向程序通过在WOW64上提供注册表某些部分的单独逻辑视图来隔离32位和64位应用程序。注册表重定向器拦截对其各自逻辑注册表视图的32位和64位注册表调用,并将它们映射到相应的物理注册表位置。重定向过程对应用程序是透明的。因此,即使数据存储在64位Windows上的其他位置,32位应用程序也可以访问注册表数据,就像它在32位Windows上运行一样。
使用KEY_WOW64_64KEY
,samDesired
或RegCreateKeyEx
RegDeleteKeyEx
参数上指定RegOpenKeyEx
以下标志使32位应用程序可以访问64位注册表视图中的重定向键,而64位应用程序可以访问32位注册表视图中的重定向键。这些标志对共享注册表项没有影响。有关更多信息,请参阅受WOW64影响的注册表项。
Flag name Value Description KEY_WOW64_64KEY 0x0100 Access a 64-bit key from either a 32-bit or 64-bit application. KEY_WOW64_32KEY 0x0200 Access a 32-bit key from either a 32-bit or 64-bit application. Windows 10 on ARM: This refers to the 32-bit ARM registry view for 32-bit ARM processes and the 32-bit x86 registry view for 32-bit x86 and 64-bit ARM64 processes.
但是我认为在单独的32位和64位版本中编译程序会更容易。重新编译时,大多数程序不需要更改。此外,您仍然需要重新编译shell扩展,因为64-bit processes can't load 32-bit DLLs