如何确定WOW64是否重定向了注册表项?

时间:2010-04-22 17:10:41

标签: windows registry wow64

是否可以确定是否重定向给定的注册表项?

我的问题是我想从32位应用程序以通用方式枚举32位和64位注册表视图中的注册表项。我可以简单地打开每个键两次,首先使用KEY_WOW64_64KEY,然后使用KEY_WOW64_32KEY。但是,如果未重定向密钥,则会为您提供完全相同的密钥,并且最终会枚举完全相同的内容两次;这就是我想要避免的。

我确实在其上找到了一些documentation,但看起来唯一的方法是检查配置单元并对密钥进行一堆字符串比较。我想到的另一种可能性是尝试在每个子键上打开Wow6432Node;如果存在则必须重定向密钥。即如果我想打开HKCU \ Software \ Microsoft \ Windows,我会尝试打开以下键: HKCU \ Wow6432Node,HKCU \ Software \ Wow6432Node,HKCU \ Software \ Microsoft \ Wow6432Node,HKCU \ Software \ Microsoft \ Windows \ Wow6432Node。遗憾的是,文档似乎暗示重定向密钥的子项不一定会被重定向,因此路由也存在问题。

那么,我的选择是什么?

2 个答案:

答案 0 :(得分:2)

你的目标不明确。为什么需要从32位应用程序以通用方式枚举32位和64位注册表视图中的注册表项?您希望在应用程序中使用64位值做什么?如果x64和x86键有不同的值,你会怎么做?这感觉像是奇怪或错误的想法。

出于重要原因重定向密钥:不破坏x86应用程序的行为。例如:COM使用CLSID来查找给定接口的正确实现。其中,“正确”意味着它可能由调用者代码运行,即应该是相同的平台。这就是为什么x64和x86应该有不同的条目集。其他重定向密钥的原因类似。一般来说,x86和x64应用程序的重定向键必须不同

Raymond Chen写道,“On 64-bit Windows, 32-bit programs run in an emulation layer, and if you don't like that, then don't use the emulator”我完全赞同他的建议。所以,如果您需要这样的话,我最好的建议就是从x64应用程序中完成。但首先要重新考虑你是否真的需要它。

编辑:RegOpenKeyExsamDesired参数可能对您有用。另请查看"Accessing an Alternate Registry View" MSDN文章。

答案 1 :(得分:2)

您需要付出相当大的痛苦,这取决于操作系统版本。完整列表为available here