• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++中根据HKey查找当前打开的注册表路径Key Name

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在StackOverFlow里找到的,一定要收藏起来。

#include <windows.h>
#include 
<string>

typedef LONG NTSTATUS;

#ifndef STATUS_SUCCESS
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
#endif

#ifndef STATUS_BUFFER_TOO_SMALL
#define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023L)
#endif

std::wstring GetKeyPathFromKKEY(HKEY key)
{
    std::wstring keyPath;
    
if (key != NULL)
    {
        HMODULE dll 
= LoadLibrary(L"ntdll.dll");
        
if (dll != NULL) {
            typedef DWORD (__stdcall 
*ZwQueryKeyType)(
                HANDLE  KeyHandle,
                
int KeyInformationClass,
                PVOID  KeyInformation,
                ULONG  Length,
                PULONG  ResultLength);

            ZwQueryKeyType func 
= reinterpret_cast<ZwQueryKeyType>(::GetProcAddress(dll, "ZwQueryKey"));

            
if (func != NULL) {
                DWORD size 
= 0;
                DWORD result 
= 0;
                result 
= func(key, 300&size);
                
if (result == STATUS_BUFFER_TOO_SMALL)
                {
                    size 
= size + 2;
                    wchar_t
* buffer = new (std::nothrow) wchar_t[size];
                    
if (buffer != NULL)
                    {
                        result 
= func(key, 3, buffer, size, &size);
                        
if (result == STATUS_SUCCESS)
                        {
                            buffer[size 
/ sizeof(wchar_t)] = L'\0';
                            keyPath 
= std::wstring(buffer + 2);
                        }

                        delete[] buffer;
                    }
                }
            }

            FreeLibrary(dll);
        }
    }
    
return keyPath;
}

int _tmain(int argc, _TCHAR* argv[])
{
    HKEY key 
= NULL;
    LONG ret 
= ERROR_SUCCESS;

    ret 
= RegOpenKey(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft"&key);
    
if (ret == ERROR_SUCCESS)
    {
        wprintf_s(L
"Key path for %p is '%s'.", key, GetKeyPathFromKKEY(key).c_str());    
        RegCloseKey(key);
    }

    
return 0;
}

输出:

Key path for 00000FDC is '\REGISTRY\MACHINE\SOFTWARE\Microsoft'.

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C语言学习笔记11发布时间:2022-07-14
下一篇:
C语言(函数)学习之index、rindex发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap