168 lines
4.5 KiB
C++
168 lines
4.5 KiB
C++
#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;
|
|
}
|
|
|