Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

167 lines
4.5 KiB

#include <windows.h>
#include <string.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include "..\..\inc\pidgen.h"
#include "..\inc\DigPid.h"
extern "C" extern WORD _C000H;
extern "C" extern WORD _F000H;
// LPBYTE lpbSystemBiosRom = (LPBYTE)MAKELONG(0, &_F000H);
// LPBYTE lpbVideoBiosRom = (LPBYTE)MAKELONG(0, &_C000H);
int PASCAL WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int cmdShow)
{
BOOL fOk;
////char *lpszProductKey;
char achPid2[32];
BYTE abPid3[DIGITALPIDMAXLEN];
DWORD dwSeq = 0;
BOOL fCCP = FALSE;
BOOL fPSS = FALSE;
int iValidCnt = 0;
int iKeyCnt = 0;
char szLineBuf[128];
char szMsgBuf[128];
FILE *pfIn = NULL;
LPDIGITALPID pdp = (LPDIGITALPID) abPid3;
#if 0 /////////////////////////////////
if (argc <= 1)
{
lpszProductKey = "PXGAD-G3CCE-G8DB8-PPXFT-DRPY3";
//// lpszProductKey = "GRHQ2-CDPWX-WWJBT-RXWFG-6CXCT";
}
else
{
lpszProductKey = argv[1]
}
#endif ////////////////////////////////
pfIn = fopen(lpszCmdLine,"r");
if (NULL == pfIn)
{
sprintf(
szMsgBuf,
"Error: unable to open file '%s'\n",
(char *)lpszCmdLine);
MessageBoxA(
NULL,
(char *)szMsgBuf,
"Doh!",
MB_OK);
}
else
{
while (NULL != fgets(szLineBuf, sizeof(szLineBuf), pfIn))
{
szLineBuf[39] = '\0';
++iKeyCnt;
*(LPDWORD)abPid3 = sizeof(abPid3);
fOk = PIDGen(
&szLineBuf[10], // [IN] 25-character Secure CD-Key (gets U-Cased)
"12345", // [IN] 5-character Release Product Code
"123-12345", // [IN] Stock Keeping Unit (formatted like 123-12345)
"MSFT", // [IN] 4-character OEM ID or NULL
NULL, // [IN] 24-character ordered set to use for decode base conversion or NULL for default set (gets U-Cased)
NULL, // [IN] pointer to optional public key or NULL
0, // [IN] byte length of optional public key
0, // [IN] key index of optional public key
FALSE, // [IN] is this an OEM install?
achPid2, // [OUT] PID 2.0, pass in ptr to 24 character array
abPid3, // [OUT] pointer to binary PID3 buffer. First DWORD is the length.
&dwSeq, // [OUT] optional ptr to sequence number (can be NULL)
&fCCP, // [OUT] optional ptr to Compliance Checking flag (can be NULL)
&fPSS); // [OUT] optional ptr to 'PSS Assigned' flag (can be NULL)
if (fOk)
{
++iValidCnt;
}
else
{
sprintf(
szMsgBuf,
"Warning: failure to validate %s\n",
&szLineBuf[10]);
MessageBoxA(
NULL,
szMsgBuf,
"Doh!",
MB_OK);
}
}
sprintf(
szMsgBuf,
"Info: %d successful validations out of %d Product Keys\n",
(int)iValidCnt,
(int)iKeyCnt);
MessageBoxA(
NULL,
(char *)szMsgBuf,
(iValidCnt == iKeyCnt) ? "Woo Hoo!" : "Doh!",
MB_OK);
}
#if 0 /////////////////////////////////
FILE *pf = fopen("test.dpi", "wb");
fwrite(pdp, sizeof(*pdp), 1, pf);
fclose(pf);
MessageBox(
NULL,
(char *)&abPid3[8],
fOk ? "Woo Hoo!" : "Doh!",
MB_OK);
if (fOk)
{
MessageBox(
NULL,
(char *)pdp->aszHardwareIdStatic,
"Woo Hoo!",
MB_OK);
char szMessage[128];
wsprintf(
szMessage,
"seq: %ld, %s%s - lictype: %ld",
dwSeq,
(fCCP) ? "CCP" : "FPP",
(fPSS) ? ", PSS" : "",
(LONG)pdp->dwlt);
MessageBox(
NULL,
szMessage,
(char *)&abPid3[8],
MB_OK);
}
#endif ////////////////////////////////
return 0;
}