将Windows注册表键路径转换为字符串?

3
我正在编写一个直接使用WIN32API(没有MFC,没有.NET)的程序并且它使用了注册表。如果发生注册表错误,我希望打印出失败的键的完整路径。
HKEY_CLASSES_ROOT、HKEY_CURRENT_CONFIG、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE和HKEY_USERS都是HKEY(DWORD)值(0x8000000表示HKEY_CLASSES_ROOT),子键和值名称均为LPCTSTR类型。
有没有将HKEY、子键和值名称(包括任何重定向http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072(v=vs.85).aspx)转换为文本字符串的方法?
我知道我可以自己构建HKEY的表格,并且它们不太可能改变,但那是一种粗糙的方法。

请参见以下链接,了解如何在C#中从HKEY句柄确定注册表键的路径:https://dev59.com/tXNA5IYBdhLWcg3wgeAc - GreatAndPowerfulOz
2个回答

3
我不知道有这样的API。唯一能提供名称的注册表函数是RegEnum...函数,它可以返回相对于打开键的名称。
由于没有太多需要反向获取(HKEY到名称)的需求,所以注册表可能只按照普通方向(名称到HKEY)进行索引。
在遍历层次结构时,您必须自己跟踪名称。

2

也许没有必要,但您可以使用ntdll的NTQueryKeyZwQueryKey)和KEY_INFORMATION_CLASS.KeyNameInformation将注册表句柄转换为“路径”字符串,尽管您最终会得到\REGISTRY\USER而不是HKEY_CURRENT_USER格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接