windows-nt/Source/XPSP1/NT/base/ntsetup/pidgen/pidset/pidset.cpp

140 lines
3.2 KiB
C++
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1998-1999, Microsoft Corporation
Module Name:
PIDSet.cpp
Abstract:
--*/
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include "hardware.h"
#include "tchar.h"
#include "DigPid.h"
#include "crc-32.h"
BOOL PidRead(LPDIGITALPID pdpid, DWORD cbDpid)
{
BOOL fSuccess = FALSE;
LONG lStatus;
HKEY hkey;
if (NULL != pdpid)
{
lStatus = RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion"),
0,
KEY_QUERY_VALUE,
&hkey);
if ( lStatus == ERROR_SUCCESS )
{
DWORD dwValueType;
lStatus = RegQueryValueEx(
hkey, TEXT("DigitalProductId"), NULL, &dwValueType, (LPBYTE)pdpid, &cbDpid);
fSuccess = (ERROR_SUCCESS == lStatus);
RegCloseKey(hkey);
}
}
return fSuccess;
}
BOOL PidWrite(LPDIGITALPID pdpid, DWORD cbDpid)
{
BOOL fSuccess = FALSE;
LONG lStatus;
HKEY hkey;
if (NULL != pdpid)
{
lStatus = RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion"),
0,
KEY_WRITE,
&hkey);
if ( lStatus == ERROR_SUCCESS )
{
lStatus = RegSetValueEx(
hkey, // handle of key to set value for
TEXT("DigitalProductId"), // name of the value to set
0, // reserved
REG_BINARY, // flag for value type
(LPBYTE)pdpid, // address of value data
cbDpid); // size of value data
fSuccess = (ERROR_SUCCESS == lStatus);
RegCloseKey(hkey);
}
}
return fSuccess;
}
int PASCAL WinMain(
HINSTANCE, // hInstance, // handle to current instance
HINSTANCE, // hPrevInstance, // handle to previous instance
LPSTR, // lpCmdLine, // pointer to command line
int )// nCmdShow // show state of window)
{
BOOL fOk = TRUE;
BYTE abDigPid[1024] = {0};
LPDIGITALPID pdpid = (LPDIGITALPID)abDigPid;
fOk = PidRead(pdpid, sizeof(abDigPid));
// check the version and ensure the HWID has not been set
if (
fOk &&
3 == pdpid->wVersionMajor &&
'\0' == pdpid->aszHardwareIdStatic[0] &&
0 == pdpid->dwBiosChecksumStatic &&
0 == pdpid->dwVolSerStatic &&
0 == pdpid->dwTotalRamStatic &&
0 == pdpid->dwVideoBiosChecksumStatic)
{
BOOL fCrcGood = ( 0 == CRC_32((LPBYTE)pdpid, sizeof(*pdpid)) );
CHardware hwid;
strcpy(pdpid->aszHardwareIdStatic, hwid.GetID());
pdpid->dwBiosChecksumStatic = hwid.GetBiosCrc32();
pdpid->dwVolSerStatic = hwid.GetVolSer();
pdpid->dwTotalRamStatic = hwid.GetTotalRamMegs();
pdpid->dwVideoBiosChecksumStatic = hwid.GetVideoBiosCrc32();
if (fCrcGood)
{
pdpid->dwCrc32 = CRC_32((LPBYTE)pdpid, sizeof(*pdpid)-sizeof(pdpid->dwCrc32));
}
else
{
pdpid->dwCrc32 = 0;
}
PidWrite(pdpid, pdpid->dwLength);
}
return 0;
}