1253 lines
33 KiB
C++
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
|