// ValidateDigPid is given a Digital PID that contains a binary // representation of the ProductKey. It needs to validate that key // against the static Public Key table typedef enum { pkstatOk = 0, pkstatInvalidCrc, pkstatSecurityFailure, pkstatUnknownGroupID, pkstatInvalidProdKey, pkstatInvalidKeyLen, pkstatOutOfMemory, } ProdKeyStatus; // return value is a ProdKeyStatus (see above) extern "C" int STDAPICALLTYPE ValidateDigitalPid( PDIGITALPID pDigPid, // [IN] DigitalPid to validate PDWORD pdwSequence, // [OUT] Sequence PBOOL pfCCP); // [OUT] upgrade flag // return value is a PidGenError (see PidGen.h) extern "C" DWORD STDAPICALLTYPE PIDGenStaticA( LPSTR lpstrSecureCdKey, // [IN] 25-character Secure CD-Key (gets U-Cased) LPCSTR lpstrRpc, // [IN] 5-character Release Product Code LPCSTR lpstrSku, // [IN] Stock Keeping Unit (formatted like 123-12345) LPCSTR lpstrOemId, // [IN] 4-character OEM ID or NULL BOOL fOem, // [IN] is this an OEM install? LPSTR lpstrPid2, // [OUT] PID 2.0, pass in ptr to 24 character array LPBYTE lpbPid3, // [OUT] pointer to binary PID3 buffer. First DWORD is the length LPDWORD lpdwSeq, // [OUT] optional ptr to sequence number (can be NULL) LPBOOL pfCCP); // [OUT] optional ptr to Compliance Checking flag (can be NULL) // return value is a PidGenError (see PidGen.h) extern "C" DWORD STDAPICALLTYPE PIDGenStaticW( LPWSTR lpstrSecureCdKey, // [IN] 25-character Secure CD-Key (gets U-Cased) LPCWSTR lpstrRpc, // [IN] 5-character Release Product Code LPCWSTR lpstrSku, // [IN] Stock Keeping Unit (formatted like 123-12345) LPCWSTR lpstrOemId, // [IN] 4-character OEM ID or NULL LPBYTE lpbPublicKey, // [IN] pointer to optional public key or NULL DWORD dwcbPublicKey, // [IN] byte length of optional public key DWORD dwKeyIdx, // [IN] key pair index optional public key BOOL fOem, // [IN] is this an OEM install? LPWSTR lpstrPid2, // [OUT] PID 2.0, pass in ptr to 24 character array LPBYTE lpbPid3, // [OUT] pointer to binary PID3 buffer. First DWORD is the length LPDWORD lpdwSeq, // [OUT] optional ptr to sequence number (can be NULL) LPBOOL pfCCP); // [OUT] optional ptr to Compliance Checking flag (can be NULL) #ifdef UNICODE #define PIDGenStatic PIDGenStaticW #else #define PIDGenStatic PIDGenStaticA #endif // UNICODE