是否可以确定给定注册表密钥是否被重定向?

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

我确实找到了一些 文档 在上面,看起来唯一的方法是检查蜂巢并在钥匙上进行大量的字符串比较。我想到的另一种可能性是尝试在每个子钥匙上打开WOW6432NODE;如果存在,则必须重定向键。 Ie if I am trying to open HKCUSoftwareMicrosoftWindows I would try to open the following keys: HKCUWow6432Node, HKCUSoftwareWow6432Node, HKCUSoftwareMicrosoftWow6432Node, and HKCUSoftwareMicrosoftWindows WOW6432NODE。不幸的是,该文档似乎暗示着重定向密钥的孩子不一定是重定向的,因此路线也存在问题。

那么,我在这里有什么选择?

有帮助吗?

解决方案

您的目标尚不清楚。为什么您需要从32位应用程序中以通用方式列举32位和64位注册表的注册表键?您要在应用程序中使用64位值来做什么?如果x64和x86键有一些不同的值,您该怎么办?感觉就像是奇怪或奇怪的想法。

由于重要原因,重定向键:不要破坏X86应用程序的行为。例如: CLSID COM用于为给定接口找到适当的实现。除其他外,“正确”意味着它可能由呼叫者代码IE运行,应该是同一平台。这就是为什么x64和x86应该有不同的条目。其他重定向密钥的原因相似。一般来说,那些重定向的钥匙 必须不同 用于X86和X64应用程序。

正如雷蒙德·陈(Raymond Chen)所写的那样在64位窗口上,在仿真层中运行32位程序,如果您不喜欢,请不要使用仿真器“而且我完全同意他的建议。因此,如果您需要这样的事情,我的最佳建议就是通过X64应用程序进行。但是首先重新考虑您是否真的需要它。

编辑:有 samDesired 参数 RegOpenKeyEx 您可能会发现有用。也看一下 “访问替代注册表视图” MSDN文章。

其他提示

您会感到痛苦,这取决于操作系统版本。完整列表是 在这里可用.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top