windows-nt/Source/XPSP1/NT/termsrv/license/tlserver/tlsdb/licpack.h
2020-09-26 16:20:57 +08:00

1253 lines
33 KiB
C++

//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996-1998
//
// File: LicPack.h
//
// Contents: LicensedPack Table
//
// History:
//
//---------------------------------------------------------------------------
#ifndef __LICENSEDPACK_H__
#define __LICENSEDPACK_H__
#include "tlsdb.h"
//
// re-direct define using what's in tlsdef.h just for backward compatibility
//
#define LICENSEDPACK_PROCESS_DWINTERNAL LSKEYPACK_EXSEARCH_DWINTERNAL
#define LICENSEDPACK_PROCESS_MODIFYTIME (LSKEYPACK_EXSEARCH_AVAILABLE << 1)
//
// Basic LicensedPack PROCESS Parameter
//
#define LICENSEDPACK_PROCESS_SZKEYPACKID LSKEYPACK_SEARCH_KEYPACKID // szKeyPackId
#define LICENSEDPACK_PROCESS_AGREEMENTTYPE LSKEYPACK_SEARCH_KEYPACKTYPE // ucKeyPackType
#define LICENSEDPACK_PROCESS_PRODUCTID LSKEYPACK_SEARCH_PRODUCTID // szProductId
#define LICENSEDPACK_PROCESS_MAJORVERSION LSKEYPACK_SEARCH_MAJORVERSION // wMajorVersion
#define LICENSEDPACK_PROCESS_MINORVERSION LSKEYPACK_SEARCH_MINORVERSION // wMinorVersion
#define LICENSEDPACK_PROCESS_PLATFORMTYPE LSKEYPACK_SEARCH_PLATFORMTYPE // dwPlatformType
#define LICENSEDPACK_PROCESS_LICENSETYPE LSKEYPACK_SEARCH_LICENSETYPE // ucLicenseType
#define LICENSEDPACK_PROCESS_COP LSKEYPACK_SEARCH_COP // ucChannelOfPurchase
#define LICENSEDPACK_PROCESS_BSERIALNUMBER LSKEYPACK_SEARCH_BSERIALNUMBER // szBeginSerialNumber
#define LICENSEDPACK_PROCESS_TOTALLICENSES LSKEYPACK_SEARCH_TOTALLICENSES // dwTotalLicenseInKeyPack
#define LICENSEDPACK_PROCESS_PRODUCTFLAGS LSKEYPACK_SEARCH_PRODUCTFLAGS // dwProductFlags
#define LICENSEDPACK_PROCESS_COMPANYNAME LSKEYPACK_SEARCH_COMPANYNAME // szCompanyName
#define LICENSEDPACK_PROCESS_EXPIREDATE LSKEYPACK_EXSEARCH_EXPIREDATE // dwExpirationDate
//
// Additional attribute for LicensedPack
//
#define LICENSEDPACK_PROCESS_ATTRIBUTE (LSKEYPACK_EXSEARCH_AVAILABLE << 2)
#define LICENSEDPACK_PROCESS_KEYPACKSTATUS LSKEYPACK_EXSEARCH_KEYPACKSTATUS // ucKeyPackStatus
#define LICENSEDPACK_PROCESS_AVAILABLE LSKEYPACK_EXSEARCH_AVAILABLE // dwNumberOfLicenses
#define LICENSEDPACK_PROCESS_ACTIVATEDATE LSKEYPACK_EXSEARCH_ACTIVATEDATE // dwActivateDate
#define LICENSEDPACK_PROCESS_EXPIREDATE LSKEYPACK_EXSEARCH_EXPIREDATE // dwExpirationDate
#define LICENSEDPACK_PROCESS_DOMAINSID (LSKEYPACK_EXSEARCH_AVAILABLE << 3)
#define LICENSEDPACK_PROCESS_LSSETUPID (LSKEYPACK_EXSEARCH_AVAILABLE << 4)
#define LICENSEDPACK_PROCESS_DOMAINNAME (LSKEYPACK_EXSEARCH_AVAILABLE << 5)
#define LICENSEDPACK_PROCESS_SERVERNAME (LSKEYPACK_EXSEARCH_AVAILABLE << 6)
#define LICENSEDPACK_PROCESS_NEXTSERIALNUMBER (LSKEYPACK_EXSEARCH_AVAILABLE << 7)
#define LICENSEDPACK_PROCESS_ENTRYSTATUS (LSKEYPACK_EXSEARCH_AVAILABLE << 8)
#define LICENSEDPACK_ALLOCATE_LICENSE_UPDATE_FIELD \
(LICENSEDPACK_PROCESS_AVAILABLE | LICENSEDPACK_PROCESS_NEXTSERIALNUMBER | LICENSEDPACK_PROCESS_MODIFYTIME)
#define LICENSEDPACK_FIND_PRODUCT \
(LSKEYPACK_SEARCH_KEYPACKID | LSKEYPACK_SEARCH_COMPANYNAME | \
LSKEYPACK_SEARCH_PRODUCTID | LSKEYPACK_SEARCH_MAJORVERSION | \
LSKEYPACK_SEARCH_MINORVERSION | LSKEYPACK_SEARCH_PLATFORMTYPE)
#define LICENSEDPACK_FIND_LICENSEPACK \
(LSKEYPACK_SEARCH_KEYPACKTYPE | LSKEYPACK_SEARCH_MAJORVERSION | \
LSKEYPACK_SEARCH_MINORVERSION | LSKEYPACK_SEARCH_COMPANYNAME | \
LSKEYPACK_SEARCH_PLATFORMTYPE)
//
// Licensed KeyPack Property Table Name
//
#define LICENSEDPACK_TABLE_NAME _TEXT("LicensedPack")
//
// Additional LicensedPack Column
//
#define LICENSEDPACK_COLUMN_KEYPACKID _TEXT("InternalKeyPackId")
#define LICENSEDPACK_COLUMN_LASTMODIFYTIME _TEXT("LastModifyTime")
//
// KeyPack property as defined in backend doc.
//
#define LICENSEDPACK_COLUMN_LPID _TEXT("LPID") // license pack ID
#define LICENSEDPACK_COLUMN_AGREEMENTTYPE _TEXT("AgreementType") // SELECT/MOLP/FREE
#define LICENSEDPACK_COLUMN_COMPANYNAME _TEXT("CompanyName")
#define LICENSEDPACK_COLUMN_PRODUCTID _TEXT("ProductID")
#define LICENSEDPACK_COLUMN_MAJORVERSION _TEXT("ProductMajorVersion")
#define LICENSEDPACK_COLUMN_MINORVERSION _TEXT("ProductMinorVersion")
#define LICENSEDPACK_COLUMN_PLATFORMTYPE _TEXT("PlatformType")
#define LICENSEDPACK_COLUMN_LICENSETYPE _TEXT("LicenseType")
#define LICENSEDPACK_COLUMN_COP _TEXT("ChannelOfPurchase")
#define LICENSEDPACK_COLUMN_BSERIALNUMBER _TEXT("BeginSerialNumber")
#define LICENSEDPACK_COLUMN_TOTALLICENSES _TEXT("TotalLicenses")
#define LICENSEDPACK_COLUMN_PRODUCTFLAGS _TEXT("ProductFlag")
#define LICENSEDPACK_COLUMN_EXPIREDATE _TEXT("ExpirationDate")
#define LICENSEDPACK_COLUMN_ATTRIBUTE _TEXT("KeyPackAttribute")
#define LICENSEDPACK_COLUMN_KEYPACKSTATUS _TEXT("KeyPackStatus")
#define LICENSEDPACK_COLUMN_AVAILABLE _TEXT("NumberLicenses")
#define LICENSEDPACK_COLUMN_NEXTSERIALNUMBER _TEXT("NextSerialNumber")
#define LICENSEDPACK_COLUMN_ACTIVATEDATE _TEXT("ActivationDate")
#define LICENSEDPACK_COLUMN_EXPIREDATE _TEXT("ExpirationDate")
#define LICENSEDPACK_COLUMN_DOMAINSETUPID _TEXT("TLSDomainSetupId")
#define LICENSEDPACK_COLUMN_LSSETUPID _TEXT("TLSSetupId")
#define LICENSEDPACK_COLUMN_DOMAINNAME _TEXT("DomainName")
#define LICENSEDPACK_COLUMN_LSERVERNAME _TEXT("ServerName")
#define LICENSEDPACK_COLUMN_ENTRYSTATUS _TEXT("EntryStatus")
typedef struct __LicensePack : public TLSReplLicensePack
{
void
Cleanup()
{
if(pbDomainSid != NULL)
{
FreeMemory(pbDomainSid);
}
}
__LicensePack()
{
pbDomainSid = NULL;
cbDomainSid = 0;
}
~__LicensePack()
{
Cleanup();
}
__LicensePack&
operator=(
const TLSReplLicensePack& v
)
/*++
++*/
{
BOOL bSuccess;
PBYTE pbOldData=pbDomainSid;
DWORD cbOldData=cbDomainSid;
*(TLSReplLicensePack *)this = v;
pbDomainSid = pbOldData;
cbDomainSid = cbOldData;
bSuccess = TLSDBCopySid(
(PSID)v.pbDomainSid,
v.cbDomainSid,
(PSID *)&pbDomainSid,
&cbDomainSid
);
JB_ASSERT(bSuccess);
return *this;
}
__LicensePack&
operator=(const __LicensePack& v)
/*++
++*/
{
BOOL bSuccess;
PBYTE pbOldData=pbDomainSid;
DWORD cbOldData=cbDomainSid;
if(this == &v)
return *this;
*(TLSReplLicensePack *)this = *(TLSReplLicensePack *)&v;
pbDomainSid = pbOldData;
cbDomainSid = cbOldData;
bSuccess = TLSDBCopySid(
(PSID)v.pbDomainSid,
v.cbDomainSid,
(PSID *)&pbDomainSid,
&cbDomainSid
);
JB_ASSERT(bSuccess);
return *this;
}
} LICENSEPACK, *LPLICENSEPACK, *PLICENSEPACK;
typedef LICENSEPACK TLSLICENSEPACK;
typedef LPLICENSEPACK LPTLSLICENSEPACK;
typedef PLICENSEPACK PTLSLICENSEPACK;
////////////////////////////////////////////////////////////////
//
// Primary Index on KeyPack ID (internal tracking number)
//
////////////////////////////////////////////////////////////////
//
// LicensedPack_KeyPackId_idx
//
#define LICENSEDPACK_INDEX_INTERNALKEYPACKID_INDEXNAME \
LICENSEDPACK_TABLE_NAME SEPERATOR LICENSEDPACK_COLUMN_KEYPACKID SEPERATOR INDEXNAME
//
// Index Key "+KeyPackId\0"
//
#define LICENSEDPACK_INDEX_INTERNALKEYPACKID_INDEXKEY \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_KEYPACKID INDEX_END_COLNAME
typedef struct __LicensedPackIdxOnInternalKpId : public JBKeyBase {
//
// Primary Index on internal KeyPack tracking ID
//
DWORD dwKeyPackId;
static LPCTSTR pszIndexName;
static LPCTSTR pszIndexKey;
//--------------------------------------------------------
__LicensedPackIdxOnInternalKpId(
const LICENSEPACK& v
) :
JBKeyBase()
/*++
++*/
{
*this = v;
}
//--------------------------------------------------------
__LicensedPackIdxOnInternalKpId(
const LICENSEPACK* v=NULL
) :
JBKeyBase()
/*++
++*/
{
if(v)
{
*this = *v;
}
}
//--------------------------------------------------------
__LicensedPackIdxOnInternalKpId&
operator=(const LICENSEPACK& v)
{
dwKeyPackId = v.dwKeyPackId;
SetEmptyValue(FALSE);
return *this;
}
//--------------------------------------------------------
LPCTSTR
GetIndexName()
{
return pszIndexName;
}
//--------------------------------------------------------
LPCTSTR
GetIndexKey()
{
return pszIndexKey;
}
//--------------------------------------------------------
DWORD
GetNumKeyComponents() { return 1; }
//--------------------------------------------------------
BOOL
GetSearchKey(
DWORD dwComponentIndex,
PVOID* pbData,
unsigned long* cbData,
JET_GRBIT* grbit,
DWORD dwSearchParm
)
/*++
++*/
{
if(dwComponentIndex >= GetNumKeyComponents())
{
JB_ASSERT(FALSE);
return FALSE;
}
*pbData = &(dwKeyPackId);
*cbData = sizeof(dwKeyPackId);
*grbit = JET_bitNewKey;
return TRUE;
}
} TLSLicensedPackIdxInternalKpId;
////////////////////////////////////////////////////////////////
//
// Index on EntryLastModifyTime
//
//
////////////////////////////////////////////////////////////////
//
// LicensedPack_LastModifyTime_idx
//
#define LICENSEDPACK_INDEX_LASTMODIFYTIME_INDEXNAME \
LICENSEDPACK_TABLE_NAME SEPERATOR LICENSEDPACK_COLUMN_LASTMODIFYTIME SEPERATOR INDEXNAME
//
// Index key "+LastModifyTime\0"
//
#define LICENSEDPACK_INDEX_LASTMODIFYTIME_INDEXKEY \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_LASTMODIFYTIME INDEX_END_COLNAME
typedef struct __LicensedPackIdxOnModifyTime : public JBKeyBase {
FILETIME ftLastModifyTime;
static LPCTSTR pszIndexName;
static LPCTSTR pszIndexKey;
//--------------------------------------------------------
__LicensedPackIdxOnModifyTime(
const LICENSEPACK& v
) :
JBKeyBase()
/*++
++*/
{
*this = v;
}
//--------------------------------------------------------
__LicensedPackIdxOnModifyTime(
const LICENSEPACK* v=NULL
) :
JBKeyBase()
/*++
++*/
{
if(v)
{
*this = *v;
}
}
//--------------------------------------------------------
__LicensedPackIdxOnModifyTime&
operator=(const LICENSEPACK& v)
{
ftLastModifyTime = v.ftLastModifyTime;
SetEmptyValue(FALSE);
return *this;
}
//--------------------------------------------------------
LPCTSTR
GetIndexName()
{
return pszIndexName;
}
//--------------------------------------------------------
LPCTSTR
GetIndexKey()
{
return pszIndexKey;
}
//--------------------------------------------------------
DWORD
GetNumKeyComponents() { return 1; }
//--------------------------------------------------------
BOOL
GetSearchKey(
DWORD dwComponentIndex,
PVOID* pbData,
unsigned long* cbData,
JET_GRBIT* grbit,
DWORD dwSearchParm
)
/*++
++*/
{
if(dwComponentIndex >= GetNumKeyComponents())
{
JB_ASSERT(FALSE);
return FALSE;
}
*pbData = &(ftLastModifyTime);
*cbData = sizeof(ftLastModifyTime);
*grbit = JET_bitNewKey;
return TRUE;
}
} TLSLicensedPackIdxLastModifyTime;
////////////////////////////////////////////////////////////////
//
// Index on Company name
//
//
////////////////////////////////////////////////////////////////
//
// KeyPack_CompanyName_idx
//
#define LICENSEDPACK_INDEX_COMPANYNAME_INDEXNAME \
LICENSEDPACK_TABLE_NAME SEPERATOR LICENSEDPACK_COLUMN_COMPANYNAME SEPERATOR INDEXNAME
//
// Index on key "+CompanyName\0"
//
#define LICENSEDPACK_INDEX_COMPANYNAME_INDEXKEY \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_COMPANYNAME INDEX_END_COLNAME
typedef struct __LicensedPackIdxOnCompanyName : public JBKeyBase {
TCHAR szCompanyName[ MAX_JETBLUE_TEXT_LENGTH + 1 ];
static LPCTSTR pszIndexName;
static LPCTSTR pszIndexKey;
//-------------------------------------------------
__LicensedPackIdxOnCompanyName(
const LICENSEPACK& v
) : JBKeyBase()
/*++
++*/
{
*this = v;
}
//-------------------------------------------------
__LicensedPackIdxOnCompanyName(
const LICENSEPACK* v=NULL
) : JBKeyBase()
/*++
++*/
{
if(v)
{
*this = *v;
}
}
//-------------------------------------------------
__LicensedPackIdxOnCompanyName&
operator=(const LICENSEPACK& v) {
SetEmptyValue(FALSE);
_tcscpy(szCompanyName, v.szCompanyName);
return *this;
}
//--------------------------------------------------------
LPCTSTR
GetIndexName()
{
return pszIndexName;
}
//--------------------------------------------------------
LPCTSTR
GetIndexKey()
{
return pszIndexKey;
}
//--------------------------------------------------------
DWORD
GetNumKeyComponents() { return 1; }
//--------------------------------------------------------
BOOL
GetSearchKey(
DWORD dwComponentIndex,
PVOID* pbData,
unsigned long* cbData,
JET_GRBIT* grbit,
DWORD dwSearchParm
)
/*++
++*/
{
if(dwComponentIndex >= GetNumKeyComponents())
{
JB_ASSERT(FALSE);
return FALSE;
}
*pbData = &(szCompanyName[0]);
*cbData = _tcslen(szCompanyName) * sizeof(TCHAR);
*grbit = JET_bitNewKey;
return TRUE;
}
} TLSLicensedPackIdxCompany;
////////////////////////////////////////////////////////////////
//
// Index on Product ID
//
//
////////////////////////////////////////////////////////////////
//
// LicensedPack_ProductId_idx
//
#define LICENSEDPACK_INDEX_PRODUCTID_INDEXNAME \
LICENSEDPACK_TABLE_NAME SEPERATOR LICENSEDPACK_COLUMN_PRODUCTID SEPERATOR INDEXNAME
//
// Index on key "+ProductId\0"
//
#define LICENSEDPACK_INDEX_PRODUCTID_INDEXKEY \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_PRODUCTID INDEX_END_COLNAME
typedef struct __LicensedPackIdxOnProductId : public JBKeyBase {
TCHAR szProductId[ MAX_JETBLUE_TEXT_LENGTH + 1 ];
static LPCTSTR pszIndexName;
static LPCTSTR pszIndexKey;
//--------------------------------------------------------
__LicensedPackIdxOnProductId(
const LICENSEPACK& v
) :
JBKeyBase()
/*++
++*/
{
*this = v;
}
//--------------------------------------------------------
__LicensedPackIdxOnProductId(
const LICENSEPACK* v=NULL
) :
JBKeyBase()
/*++
++*/
{
if(v)
{
*this = *v;
}
}
//--------------------------------------------------------
__LicensedPackIdxOnProductId&
operator=(const LICENSEPACK& v) {
SetEmptyValue(FALSE);
_tcscpy(szProductId, v.szProductId);
return *this;
}
//--------------------------------------------------------
LPCTSTR
GetIndexName()
{
return pszIndexName;
}
//--------------------------------------------------------
LPCTSTR
GetIndexKey()
{
return pszIndexKey;
}
//--------------------------------------------------------
DWORD
GetNumKeyComponents() { return 1; }
//--------------------------------------------------------
BOOL
GetSearchKey(
DWORD dwComponentIndex,
PVOID* pbData,
unsigned long* cbData,
JET_GRBIT* grbit,
DWORD dwSearchParm
)
/*++
++*/
{
if(dwComponentIndex >= GetNumKeyComponents())
{
JB_ASSERT(FALSE);
return FALSE;
}
*pbData = &(szProductId[0]);
*cbData = _tcslen(szProductId) * sizeof(TCHAR);
*grbit = JET_bitNewKey;
return TRUE;
}
} TLSLicensedPackIdxProductId;
////////////////////////////////////////////////////////////////
//
// Index on KeyPack ID
//
//
////////////////////////////////////////////////////////////////
//
// KeyPack_LPID_idx
//
#define LICENSEDPACK_INDEX_KEYPACKID_INDEXNAME \
LICENSEDPACK_TABLE_NAME SEPERATOR LICENSEDPACK_COLUMN_LPID SEPERATOR INDEXNAME
//
// Index on key "+lpid\0"
//
#define LICENSEDPACK_INDEX_KEYPACKID_INDEXKEY \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_LPID INDEX_END_COLNAME
typedef struct __LicensedPackIdxOnKeyPackId : public JBKeyBase {
TCHAR szKeyPackId[ MAX_JETBLUE_TEXT_LENGTH + 1 ];
static LPCTSTR pszIndexName;
static LPCTSTR pszIndexKey;
//----------------------------------------------
__LicensedPackIdxOnKeyPackId(
const LICENSEPACK& v
) :
JBKeyBase()
/*++
++*/
{
*this = v;
}
//----------------------------------------------
__LicensedPackIdxOnKeyPackId(
const LICENSEPACK* v=NULL
) :
JBKeyBase()
/*++
++*/
{
if(v)
{
*this = *v;
}
}
//----------------------------------------------
__LicensedPackIdxOnKeyPackId&
operator=(const LICENSEPACK& v) {
SetEmptyValue(FALSE);
_tcscpy(szKeyPackId, v.szKeyPackId);
return *this;
}
//--------------------------------------------------------
LPCTSTR
GetIndexName()
{
return pszIndexName;
}
//--------------------------------------------------------
LPCTSTR
GetIndexKey()
{
return pszIndexKey;
}
//--------------------------------------------------------
DWORD
GetNumKeyComponents() { return 1; }
//--------------------------------------------------------
BOOL
GetSearchKey(
DWORD dwComponentIndex,
PVOID* pbData,
unsigned long* cbData,
JET_GRBIT* grbit,
DWORD dwSearchParm
)
/*++
++*/
{
if(dwComponentIndex >= GetNumKeyComponents())
{
JB_ASSERT(FALSE);
return FALSE;
}
*pbData = &(szKeyPackId[0]);
*cbData = _tcslen(szKeyPackId) * sizeof(TCHAR);
*grbit = JET_bitNewKey;
return TRUE;
}
} TLSLicensedPackIdxKeyPackId;
//
////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////
//
// Index for searching Installed License Pack
// Max. 255 bytes per key so must looping
//
////////////////////////////////////////////////////////////////
//
// Index name KeyPack_InstalledProduct_idx
//
#define LICENSEDPACK_INDEX_INSTALLEDPRODUCT_INDEXNAME \
LICENSEDPACK_TABLE_NAME SEPERATOR _TEXT("InstalledProduct") SEPERATOR INDEXNAME
//
// Number of Component in this key
#define LICENSEDPACK_INSTALLEDPRODUCT_KEY_COMPONENTS 6
//
//
// Index Key "+LPID\0+MajorVersion\0+MinorVersion\0+PlatformType\0+CompanyName\0+ProductId\0"
//
#define LICENSEDPACK_INDEX_INSTALLEDPRODUCT_INDEXKEY \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_LPID INDEX_END_COLNAME \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_MAJORVERSION INDEX_END_COLNAME \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_MINORVERSION INDEX_END_COLNAME \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_PLATFORMTYPE INDEX_END_COLNAME \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_COMPANYNAME INDEX_END_COLNAME \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_PRODUCTID INDEX_END_COLNAME
typedef struct __LicensedPackIdxOnInstalledProduct : public JBKeyBase {
//
// Index for searching duplicate KeyPack
//
//
// Adding or removing member must modify GetNumKeyComponents()
//
TCHAR szKeyPackId[LSERVER_MAX_STRING_SIZE + 1];
WORD wMajorVersion;
WORD wMinorVersion;
DWORD dwPlatformType;
TCHAR szCompanyName[LSERVER_MAX_STRING_SIZE + 1];
TCHAR szProductId[LSERVER_MAX_STRING_SIZE + 1];
static LPCTSTR pszIndexName;
static LPCTSTR pszIndexKey;
//---------------------------------------------------------------
__LicensedPackIdxOnInstalledProduct(
const LICENSEPACK& v
) :
JBKeyBase()
/*++
++*/
{
*this = v;
}
//---------------------------------------------------------------
__LicensedPackIdxOnInstalledProduct(
const LICENSEPACK* v=NULL
) :
JBKeyBase()
/*++
++*/
{
if(v)
{
*this = *v;
}
}
//---------------------------------------------------------------
__LicensedPackIdxOnInstalledProduct&
operator=(const LICENSEPACK& v) {
_tcscpy(szKeyPackId, v.szKeyPackId);
_tcscpy(szCompanyName, v.szCompanyName);
_tcscpy(szProductId, v.szProductId);
wMajorVersion = v.wMajorVersion;
wMinorVersion = v.wMinorVersion;
dwPlatformType = v.dwPlatformType;
SetEmptyValue(FALSE);
return *this;
}
//--------------------------------------------------------
LPCTSTR
GetIndexName()
{
return pszIndexName;
}
//--------------------------------------------------------
LPCTSTR
GetIndexKey()
{
return pszIndexKey;
}
//--------------------------------------------------------
DWORD
GetNumKeyComponents() {
return LICENSEDPACK_INSTALLEDPRODUCT_KEY_COMPONENTS;
}
//--------------------------------------------------------
BOOL
GetSearchKey(
DWORD dwComponentIndex,
PVOID* pbData,
unsigned long* cbData,
JET_GRBIT* grbit,
DWORD dwSearchParm
)
/*++
++*/
{
BOOL retCode=TRUE;
*cbData = 0;
*grbit = 0;
if(dwComponentIndex >= GetNumKeyComponents())
{
JB_ASSERT(FALSE);
return FALSE;
}
switch(dwComponentIndex)
{
case 0:
//
// hopefully, this will reduce the number of record needed to
// loop thru.
//
*pbData = &(szKeyPackId[0]);
*cbData = _tcslen(szKeyPackId) * sizeof(TCHAR);
*grbit = JET_bitNewKey;
break;
case 1:
*pbData = &(wMajorVersion);
*cbData = sizeof(wMajorVersion);
break;
case 2:
*pbData = &(wMinorVersion);
*cbData = sizeof(wMinorVersion);
break;
case 3:
*pbData = &(dwPlatformType);
*cbData = sizeof(dwPlatformType);
break;
case 4:
*pbData = &(szCompanyName[0]);
*cbData = _tcslen(szCompanyName) * sizeof(TCHAR);
break;
case 5:
*pbData = &(szProductId[0]);
*cbData = _tcslen(szProductId) * sizeof(TCHAR);
break;
default:
JB_ASSERT(FALSE);
retCode = FALSE;
break;
}
return retCode;
}
} TLSLicensedPackIdxInstalledProduct;
////////////////////////////////////////////////////////////////
//
// Index for Allocated license
//
////////////////////////////////////////////////////////////////
//
// Index name for allocating license - KeyPack_AllocateLicense_idx
//
#define LICENSEDPACK_INDEX_ALLOCATELICENSE_INDEXNAME \
LICENSEDPACK_TABLE_NAME SEPERATOR _TEXT("AllocateLicense") SEPERATOR INDEXNAME
#define LICENSEDPACK_ALLOCATELICENSE_KEY_COMPONENTS 6
//
// Index key for allocating license
// "+KeyPackType\0+ProductMajorVersion\0+ProductMinorVersion\0+PlatformType+CompanyName\0+ProductID\0"
//
#define LICENSEDPACK_INDEX_ALLOCATELICENSE_INDEXKEY \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_AGREEMENTTYPE INDEX_END_COLNAME \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_MAJORVERSION INDEX_END_COLNAME \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_MINORVERSION INDEX_END_COLNAME \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_PLATFORMTYPE INDEX_END_COLNAME \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_COMPANYNAME INDEX_END_COLNAME \
INDEX_SORT_ASCENDING LICENSEDPACK_COLUMN_PRODUCTID INDEX_END_COLNAME
typedef struct __LicensedPackIdxOnAllocLicense : public JBKeyBase {
//
// Index for allocating licenses
//
UCHAR ucAgreementType;
WORD wMajorVersion;
WORD wMinorVersion;
DWORD dwPlatformType;
TCHAR szCompanyName[LSERVER_MAX_STRING_SIZE + 1];
TCHAR szProductId[LSERVER_MAX_STRING_SIZE + 1];
static LPCTSTR pszIndexName;
static LPCTSTR pszIndexKey;
//------------------------------------------------------
__LicensedPackIdxOnAllocLicense(
const LICENSEPACK* v=NULL
) : JBKeyBase()
/*++
++*/
{
if(v)
{
*this = *v;
}
}
//------------------------------------------------------
__LicensedPackIdxOnAllocLicense(
const LICENSEPACK& v
) :
JBKeyBase()
/*++
++*/
{
*this = v;
}
__LicensedPackIdxOnAllocLicense&
operator=(const LICENSEPACK& v) {
ucAgreementType = v.ucAgreementType;
_tcscpy(szCompanyName, v.szCompanyName);
_tcscpy(szProductId, v.szProductId);
wMajorVersion = v.wMajorVersion;
wMinorVersion = v.wMinorVersion;
dwPlatformType = v.dwPlatformType;
SetEmptyValue(FALSE);
return *this;
}
//--------------------------------------------------------
LPCTSTR
GetIndexName()
{
return pszIndexName;
}
//--------------------------------------------------------
LPCTSTR
GetIndexKey()
{
return pszIndexKey;
}
//--------------------------------------------------------
DWORD
GetNumKeyComponents() {
return LICENSEDPACK_ALLOCATELICENSE_KEY_COMPONENTS;
}
//--------------------------------------------------------------
inline BOOL
GetSearchKey(
DWORD dwComponentIndex,
PVOID* pbData,
unsigned long* cbData,
JET_GRBIT* grbit,
DWORD dwSearchParm
)
/*
*/
{
BOOL retCode=TRUE;
if(dwComponentIndex >= GetNumKeyComponents())
{
JB_ASSERT(FALSE);
return FALSE;
}
*cbData = 0;
*grbit = 0;
switch(dwComponentIndex)
{
case 0:
*pbData = &(ucAgreementType);
*cbData = sizeof(ucAgreementType);
*grbit = JET_bitNewKey;
break;
case 1:
*pbData = &(wMajorVersion);
*cbData = sizeof(wMajorVersion);
break;
case 2:
*pbData = &(wMinorVersion);
*cbData = sizeof(wMinorVersion);
break;
case 3:
*pbData = &(dwPlatformType);
*cbData = sizeof(dwPlatformType);
break;
case 4:
*pbData = &(szCompanyName[0]);
*cbData = _tcslen(szCompanyName) * sizeof(TCHAR);
break;
case 5:
*pbData = &(szProductId[0]);
*cbData = _tcslen(szProductId) * sizeof(TCHAR);
break;
default:
JB_ASSERT(FALSE);
retCode = FALSE;
break;
}
return retCode;
}
} TLSLicensedPackIdxAllocateLicense;
//------------------------------------------------------------
// -----------------------------------------------------------
// LicensedPack Table Structure
// -----------------------------------------------------------
class LicPackTable : public TLSTable<LICENSEPACK> {
private:
static LPCTSTR pszTableName;
BOOL
ProcessSingleColumn(
BOOL bFetch,
TLSColumnBase& column,
DWORD offset,
PVOID pbData,
DWORD cbData,
PDWORD pcbDataReturn,
LPCTSTR szColumnName
);
BOOL
ProcessRecord(
LICENSEPACK* v,
BOOL bFetch, // TRUE - fetch, FALSE insert
DWORD dwParam,
BOOL bUpdate
);
public:
TLSColumnUchar ucEntryStatus;
//
// Additional License Pack Property.
//
TLSColumnDword dwKeyPackId;
TLSColumnFileTime ftLastModifyTime;
TLSColumnDword dwAttribute;
TLSColumnDword dwNextSerialNumber;
TLSColumnDword dwActivateDate;
TLSColumnDword dwExpirationDate;
TLSColumnDword dwNumberOfLicenses;
TLSColumnUchar ucKeyPackStatus;
TLSColumnBinary pbDomainSid;
TLSColumnText szInstallId;
TLSColumnText szDomainName;
TLSColumnText szTlsServerName;
//
// Standard License Pack Property
//
TLSColumnText szKeyPackId;
TLSColumnUchar ucAgreementType;
TLSColumnText szCompanyName;
TLSColumnText szProductId;
TLSColumnShort wMajorVersion;
TLSColumnShort wMinorVersion;
TLSColumnDword dwPlatformType;
TLSColumnUchar ucLicenseType;
TLSColumnUchar ucChannelOfPurchase;
TLSColumnText szBeginSerialNumber;
TLSColumnDword dwTotalLicenseInKeyPack;
TLSColumnDword dwProductFlags;
//-----------------------------------------------------
virtual LPCTSTR
GetTableName()
{
return pszTableName;
}
//-----------------------------------------------------
LicPackTable(
JBDatabase& database
) :
TLSTable<LICENSEPACK> (database)
/*
*/
{
}
//-----------------------------------------------------
virtual BOOL
ResolveToTableColumn();
//-----------------------------------------------------
virtual BOOL
FetchRecord(
LICENSEPACK& kp,
DWORD dwParam=PROCESS_ALL_COLUMNS
)
/*
*/
{
if(IsValid() == FALSE)
{
DebugOutput(
_TEXT("Table %s is not valid...\n"),
GetTableName()
);
JB_ASSERT(FALSE);
SetLastJetError(JET_errInvalidParameter);
return FALSE;
}
//CCriticalSectionLocker Lock(GetTableLock());
return ProcessRecord(&kp, TRUE, dwParam, FALSE);
}
//-----------------------------------------------------
virtual BOOL
InsertRecord(
LICENSEPACK& kp,
DWORD dwParam=PROCESS_ALL_COLUMNS
)
/*
*/
{
if(IsValid() == FALSE)
{
DebugOutput(
_TEXT("Table %s is not valid...\n"),
GetTableName()
);
JB_ASSERT(FALSE);
SetLastJetError(JET_errInvalidParameter);
return FALSE;
}
//CCriticalSectionLocker Lock(GetTableLock());
return ProcessRecord(&kp, FALSE, dwParam, FALSE);
}
//-------------------------------------------------------
virtual BOOL
UpdateRecord(
LICENSEPACK& kp,
DWORD dwParam=PROCESS_ALL_COLUMNS
)
/*
*/
{
if(IsValid() == FALSE)
{
DebugOutput(
_TEXT("Table %s is not valid...\n"),
GetTableName()
);
JB_ASSERT(FALSE);
SetLastJetError(JET_errInvalidParameter);
return FALSE;
}
//CCriticalSectionLocker Lock(GetTableLock());
return ProcessRecord(&kp, FALSE, dwParam, TRUE);
}
//-------------------------------------------------------
virtual BOOL
Initialize()
{
return TRUE;
}
//-------------------------------------------------------
virtual JBKeyBase*
EnumerationIndex(
IN BOOL bMatchAll,
IN DWORD dwParam,
IN LICENSEPACK* kp,
IN OUT BOOL* bCompareKey
);
virtual BOOL
EqualValue(
LICENSEPACK& s1,
LICENSEPACK& s2,
BOOL bMatchAll,
DWORD dwParam
);
};
#endif