//+-------------------------------------------------------------------------- // // 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 { 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 (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