|
|
//+----------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996-1998
//
// File: licprotp.h
//
// Contents: Hydra Server License Protocol API private header file
//
// History: 02-08-00 RobLeit Created
//
//-----------------------------------------------------------------------------
#ifndef _LICPROTP_H_
#define _LICPROTP_H_
//-----------------------------------------------------------------------------
//
// Hydra server licensing-related registry keys and values
//
//-----------------------------------------------------------------------------
#define HYDRA_SERVER_PARAM L"SYSTEM\\CurrentControlSet\\Services\\TermService\\Parameters"
#define PERSEAT_LEEWAY_VALUE L"PerSeatExpirationLeeway"
//-----------------------------------------------------------------------------
//
// Info of the license requester
//
// pwszMachineName - The name of the machine that the license is installed on.
// pwszUserName - The user name for which the license is issued to.
//
//-----------------------------------------------------------------------------
typedef struct _License_Requester_Info { LPTSTR ptszMachineName; LPTSTR ptszUserName;
} License_Requester_Info, * PLicense_Requester_Info;
//-----------------------------------------------------------------------------
//
// The license request structure
//
//-----------------------------------------------------------------------------
typedef LICENSEREQUEST License_Request; typedef PLICENSEREQUEST PLicense_Request;
//-----------------------------------------------------------------------------
//
// The files containing the hydra server certificates and keys
//
//-----------------------------------------------------------------------------
#define HYDRA_SERVER_RSA_CERTIFICATE_FILE L"hsrsa.cer"
#define HYDRA_SERVER_PRIVATE_KEY_FILE L"hskey.prv"
//-----------------------------------------------------------------------------
//
// Registry value to configure number of days prior to grace period expiration
// for event logging.
//
//-----------------------------------------------------------------------------
#define HS_PARAM_GRACE_PERIOD_EXPIRATION_WARNING_DAYS L"LicensingGracePeriodExpirationWarningDays"
//-----------------------------------------------------------------------------
//
// The license protocol states
//
//-----------------------------------------------------------------------------
typedef enum { INIT = 1, SENT_SERVER_HELLO, CLIENT_LICENSE_PENDING, ISSUED_PLATFORM_CHALLENGE, ABORTED, ISSUED_LICENSE_COMPLETE, VALIDATION_ERROR, VALIDATED_LICENSE_COMPLETE
} HS_LICENSE_STATE;
///////////////////////////////////////////////////////////////////////////
// The validation information that needs to be given to validate a license.
//
typedef struct _Validation_Info { Product_Info * pProductInfo; DWORD cbLicense; PBYTE pLicense; DWORD cbValidationData; PBYTE pValidationData;
} Validation_Info, * PValidation_Info;
//////////////////////////////////////////////////////////////////////////////
// The data used for verifying licenses
//
typedef struct _License_Verification_Data { //
// encrypted HWID
//
PBYTE pEncryptedHwid; DWORD cbEncryptedHwid;
//
// Valid dates
//
FILETIME NotBefore; FILETIME NotAfter;
//
// License Info
//
LPCERT_LICENSE_INFO pLicenseInfo;
//
// Manufacturer
//
PBYTE pManufacturer; //
// Manufacturer Data
//
LPMSMANUFACTURER_DATA pManufacturerData; //
// Add any other fields necessary for verifying a license:
//
} License_Verification_Data, * PLicense_Verification_Data;
//-----------------------------------------------------------------------------
//
// license protocol context
//
//-----------------------------------------------------------------------------
typedef struct _HS_Protocol_Context { CRITICAL_SECTION CritSec; DWORD dwProtocolVersion; BOOL fAuthenticateServer; Product_Info ProductInfo; HS_LICENSE_STATE State; TLS_HANDLE hLSHandle; DWORD dwClientPlatformID; DWORD dwClientError; PCHALLENGE_CONTEXT pChallengeContext; PTCHAR ptszClientUserName; PTCHAR ptszClientMachineName; CERT_TYPE CertTypeUsed; DWORD dwKeyExchangeAlg; DWORD cbOldLicense; PBYTE pbOldLicense; PTS_LICENSE_INFO pTsLicenseInfo; CryptSystem CryptoContext; BOOL fLoggedProtocolError; BYTE Scope[MAX_PRODUCT_INFO_STRING_LENGTH];
} HS_Protocol_Context, * PHS_Protocol_Context;
#define PLATFORM_CHALLENGE_LENGTH 64
//-----------------------------------------------------------------------------
//
// Internal Functions
//
//-----------------------------------------------------------------------------
#ifdef __cplusplus
extern "C" { #endif
LICENSE_STATUS CreateHydraServerHello( PHS_Protocol_Context pLicenseContext, DWORD cbInBuf, PBYTE pInBuf, DWORD * pcbOutBuf, PBYTE * ppOutBuf );
void HandleErrorCondition( PHS_Protocol_Context pLicenseContext, PDWORD pcbOutBuf, PBYTE * ppOutBuf, LICENSE_STATUS * pStatus );
LICENSE_STATUS ConstructServerResponse( DWORD dwProtocolVersion, DWORD dwResponse, PDWORD pcbOutBuf, PBYTE * ppOutBuf );
LICENSE_STATUS HandleHelloResponse( PHS_Protocol_Context pLicenseContext, DWORD cbInBuf, PBYTE pInBuf, DWORD * pcbOutBuf, PBYTE * ppOutBuf );
LICENSE_STATUS HandleClientLicense( PHS_Protocol_Context pLicenseContext, DWORD cbInBuf, PBYTE pInBuf, DWORD * pcbOutBuf, PBYTE * ppOutBuf );
LICENSE_STATUS HandleNewLicenseRequest( PHS_Protocol_Context pLicenseContext, DWORD cbInBuf, PBYTE pInBuf, DWORD * pcbOutBuf, PBYTE * ppOutBuf );
LICENSE_STATUS HandleClientError( PHS_Protocol_Context pLicenseContext, DWORD cbInBuf, PBYTE pInBuf, DWORD * pcbOutBuf, PBYTE * ppOutBuf );
LICENSE_STATUS HandlePlatformChallengeResponse( PHS_Protocol_Context pLicenseContext, DWORD cbInBuf, PBYTE pInBuf, DWORD * pcbOutBuf, PBYTE * ppOutBuf );
LICENSE_STATUS GetEnvelopedData( CERT_TYPE CertType, PBYTE pEnvelopedData, DWORD dwEnvelopedDataLen, PBYTE * ppData, PDWORD pdwDataLen );
LICENSE_STATUS InitProductInfo( PProduct_Info pProductInfo, LPTSTR lptszProductSku );
LICENSE_STATUS IssuePlatformChallenge( PHS_Protocol_Context pLicenseContext, PDWORD pcbOutBuf, PBYTE * ppOutBuf );
LICENSE_STATUS PackageLicense( PHS_Protocol_Context pLicenseContext, DWORD cbLicense, PBYTE pLicense, PDWORD pcbOutBuf, PBYTE * ppOutBuf, BOOL fNewLicense );
void LicenseLogEvent( WORD wEventType, DWORD dwEventId, WORD cStrings, PWCHAR *apwszStrings );
LICENSE_STATUS CacheRawLicenseData( PHS_Protocol_Context pLicenseContext, PBYTE pbRawLicense, DWORD cbRawLicense );
LICENSE_STATUS SetExtendedData( PHS_Protocol_Context pLicenseContext, DWORD dwSupportFlags );
#ifdef UNICODE
LICENSE_STATUS Ascii2Wchar( LPSTR lpszAsciiStr, LPWSTR * ppwszWideStr );
#endif
#ifdef __cplusplus
} #endif
#endif
|