如题,想通过获得的注册表句柄HKEY获得该注册表的路径。

解决方案 »

  1.   

    整个过程还是比较麻烦的,核心函数是NtQueryObject,示例代码如下,第二个参数可为HEKY类型。
    void GetPath(char *strPath,HANDLE hHandle)
    {
    HANDLE hHeap = GetProcessHeap();
    DWORD dwSize = 0;
    POBJECT_NAME_INFORMATION pName = (POBJECT_NAME_INFORMATION)HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 0x1000);   
    NTSTATUS ns = NtQueryObject(hHandle, ObjectNameInformation, (PVOID)pName, 0x1000, &dwSize);
    DWORD i = 1;
    while(ns == STATUS_INFO_LEN_MISMATCH)
    {
      pName = (POBJECT_NAME_INFORMATION)HeapReAlloc(hHeap, HEAP_ZERO_MEMORY, (LPVOID)pName, 0x1000 * i);
      ns = NtQueryObject(hHandle, ObjectNameInformation, (PVOID)pName, 0x1000, NULL);
      i++;
    }
    wsprintf(strPath, "%S", pName->Name.Buffer);
    HeapFree(hHeap,0,pName);
    }
    编译时如提示某变量无定义,可查阅MSDN,包含相应的头文件。
      

  2.   

    首先感谢两位的回答,我是vc6.0的版本,我在msdn2001版上查找NtQueryObject怎么查找不到?是在sdk中的方法吗?另外,除了这个函数还有其他的方法吗?
      

  3.   

    没有别的方法,这个函数在ntdll.dll中,导入库在wdk中