windows-nt/Source/XPSP1/NT/termsrv/common/license/inc/licekpak.h
2020-09-26 16:20:57 +08:00

215 lines
5.9 KiB
C

/*++
Copyright (c) 1998-99 Microsoft Corporation
Module Name:
licekpak.h
Abstract:
Author:
Fred Chong (FredCh) 7/1/1998
Environment:
Notes:
--*/
#ifndef _LICE_KEYPACK_H_
#define _LICE_KEYPACK_H_
#include <windows.h>
#include <wincrypt.h>
///////////////////////////////////////////////////////////////////////////////
// keypack description
//
typedef struct _KeyPack_Description
{
LCID Locale; // Locale ID
DWORD cbProductName; // product name
PBYTE pbProductName; // product name
DWORD cbDescription; // Number of bytes in the description string
PBYTE pDescription; // Pointer to the description string
} KeyPack_Description, * PKeyPack_Description;
///////////////////////////////////////////////////////////////////////////////
// License keypack content
///////////////////////////////////////////////////////////////////////////////
//
// License keypack version
//
#define LICENSE_KEYPACK_VERSION_1_0 0x00010000
//
// License keypack type
//
#define LICENSE_KEYPACK_TYPE_SELECT 0x00000001
#define LICENSE_KEYPACK_TYPE_MOLP 0x00000002
#define LICENSE_KEYPACK_TYPE_RETAIL 0x00000003
//
// License keypack distribution channel identifiers
//
#define LICENSE_DISTRIBUTION_CHANNEL_OEM 0x00000001
#define LICENSE_DISTRIBUTION_CHANNEL_RETAIL 0x00000002
//
// License Keypack encryption information.
//
#define LICENSE_KEYPACK_ENCRYPT_CRYPTO 0x00000000
#define LICENSE_KEYPACK_ENCRYPT_ALWAYSCRYPTO 0x00000001
#define LICENSE_KEYPACK_ENCRYPT_ALWAYSFRENCH 0x00000002
#define LICENSE_KEYPACK_ENCRYPT_NONE 0x00000003
#define LICENSE_KEYPACK_ENCRYPT_PRIVATE 0x00000004
#define LICENSE_KEYPACK_ENCRYPT_MIN LICENSE_KEYPACK_ENCRYPT_CRYPTO
#define LICENSE_KEYPACK_ENCRYPT_MAX LICENSE_KEYPACK_ENCRYPT_PRIVATE
typedef struct __LicensePackEncodeParm {
DWORD dwEncodeType;
HCRYPTPROV hCryptProv;
PBYTE pbEncryptParm; // depends on dwEncodeType
DWORD cbEncryptParm;
} LicensePackEncodeParm, *PLicensePackEncodeParm;
typedef struct __LicensePackDecodeParm {
HCRYPTPROV hCryptProv;
//
// Private binaries to generate encryption key to decrypt
// license key pack blob.
//
// Private binaries to generate encryption key, this field is
// ignore if key pack blob is encrypted using certificates.
//
PBYTE pbDecryptParm;
DWORD cbDecryptParm;
//
// Certificate to generate encryption key, these fields are
// require even data is encryped using private binaries.
//
DWORD cbClearingHouseCert;
PBYTE pbClearingHouseCert;
DWORD cbRootCertificate;
PBYTE pbRootCertificate;
} LicensePackDecodeParm, *PLicensePackDecodeParm;
///////////////////////////////////////////////////////////////////////////////
// Content of license keypack
//
typedef struct _License_KeyPack_
{
DWORD dwVersion; // version of this structure
DWORD dwKeypackType; // Select, MOLP, Retail
DWORD dwDistChannel; // Distribution channel: OEM/Retail
GUID KeypackSerialNum; // CH assigned serial number for this key pack
FILETIME IssueDate; // Keypack issue date
FILETIME ActiveDate; // License active date
FILETIME ExpireDate; // License expiration date
DWORD dwBeginSerialNum; // beginning serial number for the licenses in the keypack
DWORD dwQuantity; // Number of licenses in the key pack
DWORD cbProductId; // product ID
PBYTE pbProductId; // product ID
DWORD dwProductVersion; // product version
DWORD dwPlatformId; // platform ID: Windows, Mac, UNIX etc...
DWORD dwLicenseType; // new, upgrade, competitive upgrade etc...
DWORD dwDescriptionCount; // The number of human language descriptions
PKeyPack_Description pDescription; // pointer to an array of keypack description
DWORD cbManufacturer; // The number of bytes in the manufacturer string
PBYTE pbManufacturer; // The manufacturer string
DWORD cbManufacturerData; // The number of bytes in the manufacturer-specific data
PBYTE pbManufacturerData; // Points to the manufacturer specific data
} License_KeyPack, * PLicense_KeyPack;
#define LICENSEPACKENCODE_VERSION LICENSE_KEYPACK_VERSION_1_0
#define LICENSEPACKENCODE_CURRENTVERSION LICENSEPACKENCODE_VERSION
#define LICENSEPACKENCODE_SIGNATURE 0xF0F0F0F0
typedef struct __EncodedLicenseKeyPack {
DWORD dwSignature; // old encoding puts size of encryption key.
DWORD dwStructVersion;
DWORD dwEncodeType;
DWORD cbData;
BYTE pbData[1];
} EncodedLicenseKeyPack, *PEncodedLicenseKeyPack;
#ifdef __cplusplus
extern "C" {
#endif
///////////////////////////////////////////////////////////////////////////////
//
// Exported functions
//
DWORD WINAPI
DecodeLicenseKeyPack(
PLicense_KeyPack pLicenseKeyPack,
HCRYPTPROV hCryptProv,
DWORD cbClearingHouseCert,
PBYTE pbClearingHouseCert,
DWORD cbRootCertificate,
PBYTE pbRootCertificate,
DWORD cbKeyPackBlob,
PBYTE pbKeyPackBlob );
DWORD WINAPI
DecodeLicenseKeyPackEx(
OUT PLicense_KeyPack pLicenseKeyPack,
IN PLicensePackDecodeParm pDecodeParm,
IN DWORD cbKeyPackBlob,
IN PBYTE pbKeyPackBlob
);
#ifdef __cplusplus
}
#endif
#endif