在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在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, 3, 0, 0, &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'.
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论