40 lines
1.4 KiB
C++
40 lines
1.4 KiB
C++
// Includes and Namespaces
|
|
#include "KMSHWID.h"
|
|
using namespace std;
|
|
|
|
// Get Application Specific KMSHWID from the Registry (KMS Server Service Only)
|
|
void GetKMSHWID(PQWORD KMSHWID, REQUEST* const Request)
|
|
{
|
|
// Open Registry Key
|
|
HKEY hKey;
|
|
DWORD bufferSize = 256;
|
|
WCHAR buffer[256] = {0};
|
|
|
|
// Get ClientAppID as String
|
|
WCHAR ClientAppID[GUID_BUFFER_SIZE];
|
|
StringCchPrintfW(ClientAppID, GUID_BUFFER_SIZE, L"%08X-%04hX-%04hX-%02X%02X-%02X%02X%02X%02X%02X%02X", Request->ApplicationId.Data1, Request->ApplicationId.Data2, Request->ApplicationId.Data3, Request->ApplicationId.Data4[0], Request->ApplicationId.Data4[1], Request->ApplicationId.Data4[2], Request->ApplicationId.Data4[3], Request->ApplicationId.Data4[4], Request->ApplicationId.Data4[5], Request->ApplicationId.Data4[6], Request->ApplicationId.Data4[7]);
|
|
|
|
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Services\\KMSServerService\\Parameters\\KMSHWID"), NULL, KEY_READ, &hKey) == ERROR_SUCCESS)
|
|
{
|
|
// Get Registry Value
|
|
if (RegQueryValueExW(hKey, ClientAppID, NULL, NULL, (LPBYTE)buffer, &bufferSize) == ERROR_SUCCESS)
|
|
{
|
|
if (regex_match(buffer, wregex(L"^[a-fA-F0-9]{16}$")))
|
|
{
|
|
// Close Registry Key
|
|
RegCloseKey(hKey);
|
|
|
|
// Apply Setting
|
|
*KMSHWID = wcstoull(buffer, NULL, 16);
|
|
}
|
|
}
|
|
|
|
// Close Registry Key
|
|
RegCloseKey(hKey);
|
|
}
|
|
else
|
|
{
|
|
// Return NULL KMSHWID
|
|
*KMSHWID = 0x0;
|
|
}
|
|
} |