326 lines
7.8 KiB
C
326 lines
7.8 KiB
C
//+----------------------------------------------------------------------------
|
|
//
|
|
// 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
|