//+-------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1996-1998 // // File: LicPack.cpp // // Contents: LicensedPack Table // // History: // //--------------------------------------------------------------------------- #include "LicPack.h" LPCTSTR __LicensedPackIdxOnInternalKpId::pszIndexName = LICENSEDPACK_INDEX_INTERNALKEYPACKID_INDEXNAME; LPCTSTR __LicensedPackIdxOnInternalKpId::pszIndexKey = LICENSEDPACK_INDEX_INTERNALKEYPACKID_INDEXKEY; LPCTSTR __LicensedPackIdxOnModifyTime::pszIndexName = LICENSEDPACK_INDEX_LASTMODIFYTIME_INDEXNAME; LPCTSTR __LicensedPackIdxOnModifyTime::pszIndexKey = LICENSEDPACK_INDEX_LASTMODIFYTIME_INDEXKEY; LPCTSTR __LicensedPackIdxOnCompanyName::pszIndexName = LICENSEDPACK_INDEX_COMPANYNAME_INDEXNAME; LPCTSTR __LicensedPackIdxOnCompanyName::pszIndexKey = LICENSEDPACK_INDEX_COMPANYNAME_INDEXKEY; LPCTSTR __LicensedPackIdxOnProductId::pszIndexName = LICENSEDPACK_INDEX_PRODUCTID_INDEXNAME; LPCTSTR __LicensedPackIdxOnProductId::pszIndexKey = LICENSEDPACK_INDEX_PRODUCTID_INDEXKEY; LPCTSTR __LicensedPackIdxOnKeyPackId::pszIndexName = LICENSEDPACK_INDEX_KEYPACKID_INDEXNAME; LPCTSTR __LicensedPackIdxOnKeyPackId::pszIndexKey = LICENSEDPACK_INDEX_KEYPACKID_INDEXKEY; LPCTSTR __LicensedPackIdxOnInstalledProduct::pszIndexName = LICENSEDPACK_INDEX_INSTALLEDPRODUCT_INDEXNAME; LPCTSTR __LicensedPackIdxOnInstalledProduct::pszIndexKey = LICENSEDPACK_INDEX_INSTALLEDPRODUCT_INDEXKEY; LPCTSTR __LicensedPackIdxOnAllocLicense::pszIndexName = LICENSEDPACK_INDEX_ALLOCATELICENSE_INDEXNAME; LPCTSTR __LicensedPackIdxOnAllocLicense::pszIndexKey = LICENSEDPACK_INDEX_ALLOCATELICENSE_INDEXKEY; //---------------------------------------------------- CCriticalSection LicPackTable::g_TableLock; LPCTSTR LicPackTable::pszTableName = LICENSEDPACK_TABLE_NAME; ////////////////////////////////////////////////////////////////////////// // // Index definition for KeyPack table // TLSJBIndex LicPackTable::g_TableIndex[] = { { LICENSEDPACK_INDEX_INTERNALKEYPACKID_INDEXNAME, LICENSEDPACK_INDEX_INTERNALKEYPACKID_INDEXKEY, -1, JET_bitIndexPrimary, TLSTABLE_INDEX_DEFAULT_DENSITY }, { LICENSEDPACK_INDEX_LASTMODIFYTIME_INDEXNAME, LICENSEDPACK_INDEX_LASTMODIFYTIME_INDEXKEY, -1, JET_bitIndexIgnoreNull, TLSTABLE_INDEX_DEFAULT_DENSITY }, { LICENSEDPACK_INDEX_COMPANYNAME_INDEXNAME, LICENSEDPACK_INDEX_COMPANYNAME_INDEXKEY, -1, JET_bitIndexIgnoreNull, TLSTABLE_INDEX_DEFAULT_DENSITY }, { LICENSEDPACK_INDEX_PRODUCTID_INDEXNAME, LICENSEDPACK_INDEX_PRODUCTID_INDEXKEY, -1, JET_bitIndexIgnoreNull, TLSTABLE_INDEX_DEFAULT_DENSITY }, { LICENSEDPACK_INDEX_KEYPACKID_INDEXNAME, LICENSEDPACK_INDEX_KEYPACKID_INDEXKEY, -1, JET_bitIndexIgnoreNull, TLSTABLE_INDEX_DEFAULT_DENSITY }, { LICENSEDPACK_INDEX_INSTALLEDPRODUCT_INDEXNAME, LICENSEDPACK_INDEX_INSTALLEDPRODUCT_INDEXKEY, -1, JET_bitIndexIgnoreNull, TLSTABLE_INDEX_DEFAULT_DENSITY }, { LICENSEDPACK_INDEX_ALLOCATELICENSE_INDEXNAME, LICENSEDPACK_INDEX_ALLOCATELICENSE_INDEXKEY, -1, JET_bitIndexIgnoreNull, TLSTABLE_INDEX_DEFAULT_DENSITY } }; int LicPackTable::g_NumTableIndex = sizeof(LicPackTable::g_TableIndex) / sizeof(LicPackTable::g_TableIndex[0]); ////////////////////////////////////////////////////////////////////////// // // Column Definition for KeyPack table // TLSJBColumn LicPackTable::g_Columns[] = { { LICENSEDPACK_COLUMN_ENTRYSTATUS, JET_coltypUnsignedByte, 0, JET_bitColumnFixed, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // Internal tracking KeyPackID { LICENSEDPACK_COLUMN_KEYPACKID, JET_coltypLong, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // Last Modify Time { LICENSEDPACK_COLUMN_LASTMODIFYTIME, JET_coltypBinary, sizeof(FILETIME), JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // LICENSEDPACK_COLUMN_ATTRIBUTE { LICENSEDPACK_COLUMN_ATTRIBUTE, JET_coltypLong, 0, JET_bitColumnFixed, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // LICENSEDPACK_COLUMN_KEYPACKSTATUS { LICENSEDPACK_COLUMN_KEYPACKSTATUS, JET_coltypUnsignedByte, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // LICENSEDPACK_COLUMN_AVAILABLE { LICENSEDPACK_COLUMN_AVAILABLE, JET_coltypLong, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // LICENSEDPACK_COLUMN_NEXTSERIALNUMBER { LICENSEDPACK_COLUMN_NEXTSERIALNUMBER, JET_coltypLong, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // LICENSEDPACK_COLUMN_ACTIVATEDATE { LICENSEDPACK_COLUMN_ACTIVATEDATE, JET_coltypLong, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // LICENSEDPACK_COLUMN_EXPIREDATE { LICENSEDPACK_COLUMN_EXPIREDATE, JET_coltypLong, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // LICENSEDPACK_COLUMN_DOMAINSETUPID { LICENSEDPACK_COLUMN_DOMAINSETUPID, JET_coltypLongBinary, TLSTABLE_MAX_BINARY_LENGTH, 0, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // LICENSEDPACK_COLUMN_LSSETUPID { LICENSEDPACK_COLUMN_LSSETUPID, JB_COLTYPE_TEXT, (MAX_JETBLUE_TEXT_LENGTH + 1)*sizeof(TCHAR), 0, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // LICENSEDPACK_COLUMN_DOMAINNAME { LICENSEDPACK_COLUMN_DOMAINNAME, JB_COLTYPE_TEXT, (MAX_JETBLUE_TEXT_LENGTH + 1)*sizeof(TCHAR), 0, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // LICENSEDPACK_COLUMN_LSERVERNAME { LICENSEDPACK_COLUMN_LSERVERNAME, JB_COLTYPE_TEXT, (MAX_JETBLUE_TEXT_LENGTH + 1)*sizeof(TCHAR), 0, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // Standard License Pack Property. // // // License Pack ID { LICENSEDPACK_COLUMN_LPID, JB_COLTYPE_TEXT, (MAX_JETBLUE_TEXT_LENGTH + 1)*sizeof(TCHAR), 0, JBSTRING_NULL, _tcslen(JBSTRING_NULL), TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // KeyPack type { LICENSEDPACK_COLUMN_AGREEMENTTYPE, JET_coltypUnsignedByte, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // CompanyName { LICENSEDPACK_COLUMN_COMPANYNAME, // JET_coltypLongText, JB_COLTYPE_TEXT, (MAX_JETBLUE_TEXT_LENGTH + 1)*sizeof(TCHAR), 0, JBSTRING_NULL, _tcslen(JBSTRING_NULL), TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // Product ID { LICENSEDPACK_COLUMN_PRODUCTID, //JET_coltypLongText, JB_COLTYPE_TEXT, (MAX_JETBLUE_TEXT_LENGTH + 1)*sizeof(TCHAR), 0, JBSTRING_NULL, _tcslen(JBSTRING_NULL), TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // Major Version { LICENSEDPACK_COLUMN_MAJORVERSION, JET_coltypShort, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // Minor Version { LICENSEDPACK_COLUMN_MINORVERSION, JET_coltypShort, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // Platform Type { LICENSEDPACK_COLUMN_PLATFORMTYPE, JET_coltypLong, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // License Type { LICENSEDPACK_COLUMN_LICENSETYPE, JET_coltypUnsignedByte, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // ChannelOfPurchase { LICENSEDPACK_COLUMN_COP, JET_coltypUnsignedByte, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // Begin Serial Number { LICENSEDPACK_COLUMN_BSERIALNUMBER, //JET_coltypLongText, JB_COLTYPE_TEXT, (MAX_JETBLUE_TEXT_LENGTH + 1)*sizeof(TCHAR), 0, JBSTRING_NULL, _tcslen(JBSTRING_NULL), TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // Total license in License Pack { LICENSEDPACK_COLUMN_TOTALLICENSES, JET_coltypLong, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID }, // // Product specific Flag { LICENSEDPACK_COLUMN_PRODUCTFLAGS, JET_coltypLong, 0, JET_bitColumnFixed | JET_bitColumnNotNULL, NULL, 0, TLS_JETBLUE_COLUMN_CODE_PAGE, TLS_JETBLUE_COLUMN_COUNTRY_CODE, TLS_JETBLUE_COLUMN_LANGID } }; int LicPackTable::g_NumColumns = sizeof(LicPackTable::g_Columns) / sizeof(LicPackTable::g_Columns[0]); //----------------------------------------------------- BOOL LicPackTable::ResolveToTableColumn() /* */ { m_JetErr = ucEntryStatus.AttachToTable( *this, LICENSEDPACK_COLUMN_ENTRYSTATUS ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = dwKeyPackId.AttachToTable( *this, LICENSEDPACK_COLUMN_KEYPACKID ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = ftLastModifyTime.AttachToTable( *this, LICENSEDPACK_COLUMN_LASTMODIFYTIME ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = dwAttribute.AttachToTable( *this, LICENSEDPACK_COLUMN_ATTRIBUTE ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = ucKeyPackStatus.AttachToTable( *this, LICENSEDPACK_COLUMN_KEYPACKSTATUS ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = dwNumberOfLicenses.AttachToTable( *this, LICENSEDPACK_COLUMN_AVAILABLE ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = dwNextSerialNumber.AttachToTable( *this, LICENSEDPACK_COLUMN_NEXTSERIALNUMBER ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = dwActivateDate.AttachToTable( *this, LICENSEDPACK_COLUMN_ACTIVATEDATE ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = dwExpirationDate.AttachToTable( *this, LICENSEDPACK_COLUMN_EXPIREDATE ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = pbDomainSid.AttachToTable( *this, LICENSEDPACK_COLUMN_DOMAINSETUPID ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = szInstallId.AttachToTable( *this, LICENSEDPACK_COLUMN_LSSETUPID ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = szDomainName.AttachToTable( *this, LICENSEDPACK_COLUMN_DOMAINNAME ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = szTlsServerName.AttachToTable( *this, LICENSEDPACK_COLUMN_LSERVERNAME ); if(IsSuccess() == FALSE) goto cleanup; //---------------------------------------------------- m_JetErr = szKeyPackId.AttachToTable( *this, LICENSEDPACK_COLUMN_LPID ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = ucAgreementType.AttachToTable( *this, LICENSEDPACK_COLUMN_AGREEMENTTYPE ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = szCompanyName.AttachToTable( *this, LICENSEDPACK_COLUMN_COMPANYNAME ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = szProductId.AttachToTable( *this, LICENSEDPACK_COLUMN_PRODUCTID ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = wMajorVersion.AttachToTable( *this, LICENSEDPACK_COLUMN_MAJORVERSION ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = wMinorVersion.AttachToTable( *this, LICENSEDPACK_COLUMN_MINORVERSION ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = dwPlatformType.AttachToTable( *this, LICENSEDPACK_COLUMN_PLATFORMTYPE ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = ucLicenseType.AttachToTable( *this, LICENSEDPACK_COLUMN_LICENSETYPE ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = ucChannelOfPurchase.AttachToTable( *this, LICENSEDPACK_COLUMN_COP ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = szBeginSerialNumber.AttachToTable( *this, LICENSEDPACK_COLUMN_BSERIALNUMBER ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = dwTotalLicenseInKeyPack.AttachToTable( *this, LICENSEDPACK_COLUMN_TOTALLICENSES ); if(IsSuccess() == FALSE) goto cleanup; m_JetErr = dwProductFlags.AttachToTable( *this, LICENSEDPACK_COLUMN_PRODUCTFLAGS ); cleanup: return IsSuccess(); } //------------------------------------------------------------ CLASS_PRIVATE BOOL LicPackTable::ProcessSingleColumn( IN BOOL bFetch, IN TLSColumnBase& column, IN DWORD offset, IN PVOID pbData, IN DWORD cbData, IN PDWORD pcbDataReturn, IN LPCTSTR szColumnName ) /* Abstract: Fetch/Insert/Update a particular column. Parameter: bFetch - TRUE if fetch, FALSE if update/insert. column - Intended column for operation, reference pointer to TLSColumn szColumnName - name of the column, for debugging print purpose only Returns: TRUE if successful, FALSE otherwise. */ { if(bFetch) { m_JetErr = column.FetchColumnValue( pbData, cbData, offset, pcbDataReturn ); } else { m_JetErr = column.InsertColumnValue( pbData, cbData, offset ); } REPORTPROCESSFAILED( bFetch, GetTableName(), szColumnName, m_JetErr ); return IsSuccess(); } //-------------------------------------------------------------- CLASS_PRIVATE BOOL LicPackTable::ProcessRecord( LICENSEPACK* kp, BOOL bFetch, DWORD dwParam, BOOL bUpdate ) /*++ See comment on TLSTable<> template class ++*/ { DWORD dwSize; JB_ASSERT(kp != NULL); if(kp == NULL) { SetLastJetError(JET_errInvalidParameter); return FALSE; } if(bFetch == FALSE) { BeginUpdate(bUpdate); // // any update will require update on lastmodifytime column if(!(dwParam & LICENSEDPACK_PROCESS_MODIFYTIME)) { #if DBG // // This is for self-checking only, TLSColumnFileTime // will automatically update the time. // JB_ASSERT(FALSE); #endif dwParam |= LICENSEDPACK_PROCESS_MODIFYTIME; } } else { SetLastJetError(JET_errSuccess); } if(IsSuccess() == FALSE) { JB_ASSERT(FALSE); goto cleanup; } // // if(dwParam & LICENSEDPACK_PROCESS_SZKEYPACKID) { ProcessSingleColumn( bFetch, szKeyPackId, 0, kp->szKeyPackId, sizeof(kp->szKeyPackId), &dwSize, LICENSEDPACK_COLUMN_LPID ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_AGREEMENTTYPE) { ProcessSingleColumn( bFetch, ucAgreementType, 0, &(kp->ucAgreementType), sizeof(kp->ucAgreementType), &dwSize, LICENSEDPACK_COLUMN_AGREEMENTTYPE ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_PRODUCTID) { ProcessSingleColumn( bFetch, szProductId, 0, kp->szProductId, sizeof(kp->szProductId), &dwSize, LICENSEDPACK_COLUMN_PRODUCTID ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_MAJORVERSION) { ProcessSingleColumn( bFetch, wMajorVersion, 0, &(kp->wMajorVersion), sizeof(kp->wMajorVersion), &dwSize, LICENSEDPACK_COLUMN_MAJORVERSION ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_MINORVERSION) { ProcessSingleColumn( bFetch, wMinorVersion, 0, &(kp->wMinorVersion), sizeof(kp->wMinorVersion), &dwSize, LICENSEDPACK_COLUMN_MINORVERSION ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_PLATFORMTYPE) { ProcessSingleColumn( bFetch, dwPlatformType, 0, &(kp->dwPlatformType), sizeof(kp->dwPlatformType), &dwSize, LICENSEDPACK_COLUMN_PLATFORMTYPE ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_LICENSETYPE) { ProcessSingleColumn( bFetch, ucLicenseType, 0, &(kp->ucLicenseType), sizeof(kp->ucLicenseType), &dwSize, LICENSEDPACK_COLUMN_LICENSETYPE ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_COP) { ProcessSingleColumn( bFetch, ucChannelOfPurchase, 0, &(kp->ucChannelOfPurchase), sizeof(kp->ucChannelOfPurchase), &dwSize, LICENSEDPACK_COLUMN_COP ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_BSERIALNUMBER) { ProcessSingleColumn( bFetch, szBeginSerialNumber, 0, kp->szBeginSerialNumber, sizeof(kp->szBeginSerialNumber), &dwSize, LICENSEDPACK_COLUMN_BSERIALNUMBER ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_TOTALLICENSES) { ProcessSingleColumn( bFetch, dwTotalLicenseInKeyPack, 0, &(kp->dwTotalLicenseInKeyPack), sizeof(kp->dwTotalLicenseInKeyPack), &dwSize, LICENSEDPACK_COLUMN_TOTALLICENSES ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_PRODUCTFLAGS) { ProcessSingleColumn( bFetch, dwProductFlags, 0, &(kp->dwProductFlags), sizeof(kp->dwProductFlags), &dwSize, LICENSEDPACK_COLUMN_PRODUCTFLAGS ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_COMPANYNAME) { ProcessSingleColumn( bFetch, szCompanyName, 0, kp->szCompanyName, sizeof(kp->szCompanyName), &dwSize, LICENSEDPACK_COLUMN_COMPANYNAME ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_DWINTERNAL) { // this is the primary index, can't be changed if(bUpdate == FALSE) { ProcessSingleColumn( bFetch, dwKeyPackId, 0, &(kp->dwKeyPackId), sizeof(kp->dwKeyPackId), &dwSize, LICENSEDPACK_COLUMN_KEYPACKID ); } } if(IsSuccess() == FALSE) goto cleanup; if(dwParam & LICENSEDPACK_PROCESS_MODIFYTIME) { ProcessSingleColumn( bFetch, ftLastModifyTime, 0, &(kp->ftLastModifyTime), sizeof(kp->ftLastModifyTime), &dwSize, LICENSEDPACK_COLUMN_LASTMODIFYTIME ); } if(IsSuccess() == FALSE) goto cleanup; if(dwParam & LICENSEDPACK_PROCESS_ATTRIBUTE) { ProcessSingleColumn( bFetch, dwAttribute, 0, &(kp->dwAttribute), sizeof(kp->dwAttribute), &dwSize, LICENSEDPACK_COLUMN_ATTRIBUTE ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_KEYPACKSTATUS) { ProcessSingleColumn( bFetch, ucKeyPackStatus, 0, &(kp->ucKeyPackStatus), sizeof(kp->ucKeyPackStatus), &dwSize, LICENSEDPACK_COLUMN_KEYPACKSTATUS ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_AVAILABLE) { ProcessSingleColumn( bFetch, dwNumberOfLicenses, 0, &(kp->dwNumberOfLicenses), sizeof(kp->dwNumberOfLicenses), &dwSize, LICENSEDPACK_COLUMN_AVAILABLE ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_ACTIVATEDATE) { ProcessSingleColumn( bFetch, dwActivateDate, 0, &(kp->dwActivateDate), sizeof(kp->dwActivateDate), &dwSize, LICENSEDPACK_COLUMN_ACTIVATEDATE ); } if(IsSuccess() == FALSE) goto cleanup; // // if(dwParam & LICENSEDPACK_PROCESS_EXPIREDATE) { ProcessSingleColumn( bFetch, dwExpirationDate, 0, &(kp->dwExpirationDate), sizeof(kp->dwExpirationDate), &dwSize, LICENSEDPACK_COLUMN_EXPIREDATE ); } if(IsSuccess() == FALSE) goto cleanup; #if 0 // no more domain sid. if(dwParam & LICENSEDPACK_PROCESS_DOMAINSID) { if(bFetch == TRUE) { DWORD size; m_JetErr = pbDomainSid.FetchColumnValue( NULL, 0, 0, &size ); if(IsSuccess() == FALSE) goto cleanup; if(size > kp->cbDomainSid || kp->pbDomainSid == NULL) { FreeMemory(kp->pbDomainSid); kp->pbDomainSid = (PBYTE)AllocateMemory(kp->cbDomainSid = size); if(kp->pbDomainSid == NULL) { SetLastJetError(JET_errOutOfMemory); goto cleanup; } } m_JetErr = pbDomainSid.FetchColumnValue( kp->pbDomainSid, kp->cbDomainSid, 0, &kp->cbDomainSid ); } else { ProcessSingleColumn( bFetch, pbDomainSid, 0, kp->pbDomainSid, kp->cbDomainSid, &dwSize, LICENSEDPACK_COLUMN_DOMAINSETUPID ); } } if(IsSuccess() == FALSE) goto cleanup; #endif if(dwParam & LICENSEDPACK_PROCESS_LSSETUPID) { ProcessSingleColumn( bFetch, szInstallId, 0, kp->szInstallId, sizeof(kp->szInstallId), &dwSize, LICENSEDPACK_COLUMN_LSSETUPID ); } if(IsSuccess() == FALSE) goto cleanup; if(dwParam & LICENSEDPACK_PROCESS_DOMAINNAME) { ProcessSingleColumn( bFetch, szDomainName, 0, kp->szDomainName, sizeof(kp->szDomainName), &dwSize, LICENSEDPACK_COLUMN_DOMAINNAME ); } if(IsSuccess() == FALSE) goto cleanup; if(dwParam & LICENSEDPACK_PROCESS_SERVERNAME) { ProcessSingleColumn( bFetch, szTlsServerName, 0, &kp->szTlsServerName, sizeof(kp->szTlsServerName), &dwSize, LICENSEDPACK_COLUMN_LSERVERNAME ); } if(IsSuccess() == FALSE) goto cleanup; if(dwParam & LICENSEDPACK_PROCESS_NEXTSERIALNUMBER) { ProcessSingleColumn( bFetch, dwNextSerialNumber, 0, &(kp->dwNextSerialNumber), sizeof(kp->dwNextSerialNumber), &dwSize, LICENSEDPACK_COLUMN_NEXTSERIALNUMBER ); } if(IsSuccess() == FALSE) goto cleanup; if(dwParam & LICENSEDPACK_PROCESS_ENTRYSTATUS) { ProcessSingleColumn( bFetch, ucEntryStatus, 0, &(kp->ucEntryStatus), sizeof(kp->ucEntryStatus), &dwSize, LICENSEDPACK_COLUMN_ENTRYSTATUS ); } cleanup: // // For inserting/updating record if(bFetch == FALSE) { JET_ERR jetErr; jetErr = GetLastJetError(); // // End update will reset the error code // EndUpdate(IsSuccess() == FALSE); if(jetErr != JET_errSuccess && IsSuccess() == FALSE) SetLastJetError(jetErr); } return IsSuccess(); } //------------------------------------------------------- JBKeyBase* LicPackTable::EnumerationIndex( IN BOOL bMatchAll, IN DWORD dwParam, IN LICENSEPACK* kp, IN OUT BOOL* pbCompareKey ) /* */ { BOOL bRetCode; JBKeyBase* index=NULL; // // if matching all value in field, set to compare key // *pbCompareKey = bMatchAll; if(dwParam == LICENSEDPACK_FIND_PRODUCT) { index = new TLSLicensedPackIdxInstalledProduct(kp); } else if(dwParam == LICENSEDPACK_FIND_LICENSEPACK) { index = new TLSLicensedPackIdxAllocateLicense(kp); } else if(dwParam & LICENSEDPACK_PROCESS_SZKEYPACKID) { index = new TLSLicensedPackIdxKeyPackId(kp); } else if(dwParam & LICENSEDPACK_PROCESS_COMPANYNAME) { index = new TLSLicensedPackIdxCompany(kp); } else if(dwParam & LICENSEDPACK_PROCESS_PRODUCTID) { index = new TLSLicensedPackIdxProductId(kp); } else if(dwParam & LICENSEDPACK_PROCESS_MODIFYTIME) { index = new TLSLicensedPackIdxLastModifyTime(kp); } else { index = new TLSLicensedPackIdxInternalKpId(kp); // // default index, can't compare key even if // bmatchall is set to true // *pbCompareKey = (bMatchAll && (dwParam & LICENSEDPACK_PROCESS_DWINTERNAL)); } return index; } //------------------------------------------------------- BOOL LicPackTable::EqualValue( IN LICENSEPACK& s1, // values to be compared IN LICENSEPACK& s2, IN BOOL bMatchAll, // match all specified fields in structure IN DWORD dwParam // which fields in KEYPACK to be compared ) /* Compare fields in two KEYPACK structure s1 : first value s2 : second value bMatchAll : TRUE if match all field specified in dwParam, FALSE otherwise dwParam : fields that will be in comparision */ { BOOL bRetCode = TRUE; if(dwParam & LICENSEDPACK_PROCESS_ENTRYSTATUS) { bRetCode = (s1.ucEntryStatus == s2.ucEntryStatus); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_SZKEYPACKID) { bRetCode = (_tcscmp(s1.szKeyPackId, s2.szKeyPackId) == 0); // // bMatchAll == TRUE and bRetCode == FALSE -> return FALSE // bMatchAll == FALSE and bRetCode == TRUE -> return TRUE if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_AGREEMENTTYPE) { bRetCode = (s1.ucAgreementType == s2.ucAgreementType); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_PRODUCTID) { bRetCode = (_tcscmp(s1.szProductId, s2.szProductId) == 0); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_MAJORVERSION) { bRetCode = (s1.wMajorVersion == s2.wMajorVersion); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_MINORVERSION) { bRetCode = (s1.wMinorVersion == s2.wMinorVersion); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_PLATFORMTYPE) { bRetCode = (s1.dwPlatformType == s2.dwPlatformType); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_LICENSETYPE) { bRetCode = (s1.ucLicenseType == s2.ucLicenseType); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_COP) { bRetCode = (s1.ucChannelOfPurchase == s2.ucChannelOfPurchase); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_BSERIALNUMBER) { bRetCode = (_tcscmp(s1.szBeginSerialNumber, s2.szBeginSerialNumber) == 0); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_TOTALLICENSES) { bRetCode = (s1.dwTotalLicenseInKeyPack == s2.dwTotalLicenseInKeyPack); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_PRODUCTFLAGS) { bRetCode = (s1.dwProductFlags == s2.dwProductFlags); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_COMPANYNAME) { bRetCode = (_tcscmp(s1.szCompanyName, s2.szCompanyName) == 0); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_DWINTERNAL) { bRetCode = (s1.dwKeyPackId == s2.dwKeyPackId); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_MODIFYTIME) { bRetCode = (CompareFileTime(&s1.ftLastModifyTime, &s2.ftLastModifyTime) == 0); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_ATTRIBUTE) { bRetCode = (s1.dwAttribute == s2.dwAttribute); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_KEYPACKSTATUS) { bRetCode = (s1.ucKeyPackStatus == s2.ucKeyPackStatus); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_AVAILABLE) { bRetCode = (s1.dwNumberOfLicenses == s2.dwNumberOfLicenses); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_ACTIVATEDATE) { bRetCode = (s1.dwActivateDate == s2.dwActivateDate); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_EXPIREDATE) { bRetCode = (s1.dwExpirationDate == s2.dwExpirationDate); if(bMatchAll != bRetCode) goto cleanup; } //if(dwParam & LICENSEDPACK_PROCESS_DOMAINSID) //{ // bRetCode = EqualSid(s1.pbDomainSid, s2.pbDomainSid); // if(bMatchAll != bRetCode) // goto cleanup; //} if(dwParam & LICENSEDPACK_PROCESS_LSSETUPID) { bRetCode = (_tcsicmp(s1.szInstallId, s2.szInstallId) == 0); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_DOMAINNAME) { bRetCode = (_tcsicmp(s1.szDomainName, s2.szDomainName) == 0); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_SERVERNAME) { bRetCode = (_tcsicmp(s1.szTlsServerName, s2.szTlsServerName) == 0); if(bMatchAll != bRetCode) goto cleanup; } if(dwParam & LICENSEDPACK_PROCESS_NEXTSERIALNUMBER) { bRetCode = (s1.dwNextSerialNumber == s2.dwNextSerialNumber); } cleanup: return bRetCode; }