Files
KMSEmulator/source/KMSHWID.cpp
2015-06-04 13:32:42 +04:00

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;
}
}