zoukankan      html  css  js  c++  java
  • 通过注册表的句柄得到当前句柄在注册表中的路径

       1: #include <windows.h>
       2: #include <string>
       3:  
       4: typedef LONG NTSTATUS;
       5:  
       6: #ifndef STATUS_SUCCESS
       7: #define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
       8: #endif
       9:  
      10: #ifndef STATUS_BUFFER_TOO_SMALL
      11: #define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023L)
      12: #endif
      13:  
      14: std::wstring GetKeyPathFromKKEY(HKEY key)
      15: {
      16:     std::wstring keyPath;
      17:     if (key != NULL)
      18:     {
      19:      HMODULE dll = LoadLibrary(L"ntdll.dll");
      20:      if (dll != NULL) {
      21:       typedef DWORD (__stdcall *ZwQueryKeyType)(
      22:        HANDLE  KeyHandle,
      23:        int KeyInformationClass,
      24:        PVOID  KeyInformation,
      25:        ULONG  Length,
      26:        PULONG  ResultLength);
      27:  
      28:       ZwQueryKeyType func = reinterpret_cast<ZwQueryKeyType>(::GetProcAddress(dll, "ZwQueryKey"));
      29:  
      30:       if (func != NULL) {
      31:        DWORD size = 0;
      32:        DWORD result = 0;
      33:        result = func(key, 3, 0, 0, &size);
      34:        if (result == STATUS_BUFFER_TOO_SMALL)
      35:        {
      36:         size = size + 2;
      37:         wchar_t* buffer = new (std::nothrow) wchar_t[size];
      38:         if (buffer != NULL)
      39:         {
      40:          result = func(key, 3, buffer, size, &size);
      41:          if (result == STATUS_SUCCESS)
      42:          {
      43:           buffer[size / sizeof(wchar_t)] = L'\0';
      44:           keyPath = std::wstring(buffer + 2);
      45:          }
      46:  
      47:          delete[] buffer;
      48:         }
      49:        }
      50:       }
      51:  
      52:       FreeLibrary(dll);
      53:      }
      54:     }
      55:     return keyPath;
      56: }
      57:  
      58: int _tmain(int argc, _TCHAR* argv[])
      59: {
      60:     HKEY key = NULL;
      61:     LONG ret = ERROR_SUCCESS;
      62:  
      63:     ret = RegOpenKey(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft", &key);
      64:     if (ret == ERROR_SUCCESS)
      65:     {
      66:      wprintf_s(L"Key path for %p is '%s'.", key, GetKeyPathFromKKEY(key).c_str());    
      67:      RegCloseKey(key);
      68:     }
      69:  
      70:     return 0;
      71: }
     


    作者:GangWang
    出处:http://www.cnblogs.com/GnagWang/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     
  • 相关阅读:
    debug和release转载
    坐标系与基本图元(8)
    坐标系与基本图元(7)
    坐标系与基本图元(5)
    坐标系与基本图元(6)
    坐标系与基本图元(4)
    坐标系与基本图元(3)
    坐标系与基本图元(2)
    BZOJ 1090
    Xor
  • 原文地址:https://www.cnblogs.com/GnagWang/p/1693343.html
Copyright © 2011-2022 走看看