Windows 使用NtQueryObject获取注册表路径

Windows 使用NtQueryObject获取注册表路径,windows,winapi,Windows,Winapi,我需要在运行时通过它的句柄获取注册表路径。为此,我使用NtQueryObject函数。我的问题是NtQueryObject以奇怪的格式给了我路径(见下图) 我想,这是编写驱动程序时需要使用的格式,但我希望将此路径转换为标准的reg路径,例如 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run". 目前我正在替换 \REGISTRY\MACHINE\etc 与 HKEY\U本地\U机器\etc 但是这个WOW6

我需要在运行时通过它的句柄获取注册表路径。为此,我使用NtQueryObject函数。我的问题是NtQueryObject以奇怪的格式给了我路径(见下图)

我想,这是编写驱动程序时需要使用的格式,但我希望将此路径转换为标准的reg路径,例如

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run". 
目前我正在替换

 \REGISTRY\MACHINE\etc

HKEY\U本地\U机器\etc


但是这个WOW6432节点密钥是一个问题。我想它的名字在不同的机器上会有所不同,即使32位的windows也没有这个键。所以我的问题是,是否有任何标准的方法来进行注册表路径转换(可能是一些win api实现的)?

WOW6432节点实际上是该特定键的注册表路径的一部分,尽管它对32位进程是隐藏的。如果使用Regedit查看软件密钥,您将找到Wow6432Node

在64位系统上,HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run和HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run都存在。取决于你想做什么,你可能需要和他们一起工作,或者只需要一个人

这描述了受WOW64影响的注册表项:

您可以显式访问注册表的32位或64位视图,如下所述:


改用RegQueryInfoKey()。谢谢Hans,我感谢您的帮助:)您的解决方案看起来不错,但有一个问题。应该使用key\u QUERY\u VALUE打开密钥以进行查询,这在我的情况下不是一个解决方案:)再次感谢。一点也不,MS实现32位向后兼容性的方式吸引了很多人。:-)