win*_*006 2 windows registry wow64 visual-c++
我的 32 位应用程序在 64 位 Windows 7 上运行。我正在尝试访问注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall。我可以在 regedit 中看到,Uninstall默认 64 位注册表视图中的项下方有几个子项(Dropbox 在该位置以及 Google Chrome 中创建了一个项)。Uninstall然而, 32位注册表视图中确实没有键。实际上,在regedit中只有Active Setup下面一个键HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft。Windows下面连子键都没有Microsoft。
但是,当我的 32 位应用程序尝试访问 的 32 位注册表视图时HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall,我从 64 位视图中获取密钥。这是为什么?
即使标志KEY_WOW64_32KEY在这里也无济于事。我们的代码需要知道结果是来自 32 位视图还是 64 位视图。
我们的代码还访问密钥的 32 位和 64 位视图HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall,但我在那里没有看到这个问题。不同之处在于 HKLM 的 32 位视图有密钥Uninstall,而 HKCU 的 32 位视图没有。
我知道WoW64的注册表重定向,但这似乎不同。我在 MSDN 上找不到任何有用的信息。有人可以解释一下吗?
这是有记录的,但只是间接的。此MSDN 页面列出HKLM\Software为重定向和HKCU\Software共享。
注意:在此上下文中,重定向意味着有两个注册表视图,一种用于 32 位,一种用于 64 位(换句话说:子Wow6432Node项存在并被使用),而共享意味着只有一个用于 32 位的视图位和 64 位进程。
是的,它的HKEY_CURRENT_USER\Software\Wow6432Node存在很有趣。正如 OP 提到的,下面只有一个子项Microsoft\Active Setup\Installed Components- 这可能是因为 Microsoft 的 Active Setup 代码的作者Wow6432Node在其注册表 API 调用中错误地使用了 as 子项路径,而不是通过samDesired参数指定所需的视图RegOpenKeyEx。
| 归档时间: |
|
| 查看次数: |
2649 次 |
| 最近记录: |