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

1155 lines
28 KiB
C++

//+--------------------------------------------------------------------------
//
// Copyright (c) 1997-1999 Microsoft Corporation
//
// File: lictab.cpp
//
// Contents:
//
// History:
//
//---------------------------------------------------------------------------
#include "Licensed.h"
LPCTSTR __LicensedIndexOnLicenseId::pszIndexName = LICENSE_ID_INDEXNAME;
LPCTSTR __LicensedIndexOnLicenseId::pszIndexKey = LICENSE_ID_INDEXNAME_INDEXKEY;
LPCTSTR __LicensedIndexOnKeyPackId::pszIndexName = LICENSE_KEYPACKID_INDEXNAME;
LPCTSTR __LicensedIndexOnKeyPackId::pszIndexKey = LICENSE_KEYPACKID_INDEXNAME_INDEXKEY;
LPCTSTR __LicensedIndexOnLastModifyTime::pszIndexName = LICENSE_KEYPACKID_INDEXNAME;
LPCTSTR __LicensedIndexOnLastModifyTime::pszIndexKey = LICENSE_KEYPACKID_INDEXNAME_INDEXKEY;
LPCTSTR __LicensedIndexOnMachineName::pszIndexName = LICENSE_CLIENT_MACHINENAME_INDEXNAME;
LPCTSTR __LicensedIndexOnMachineName::pszIndexKey = LICENSE_CLIENT_MACHINENAME_INDEXNAME_INDEXKEY;
LPCTSTR __LicensedIndexOnUserName::pszIndexName = LICENSE_CLIENT_USERNAME_INDEXNAME;
LPCTSTR __LicensedIndexOnUserName::pszIndexKey = LICENSE_CLIENT_USERNAME_INDEXNAME_INDEXKEY;
LPCTSTR __LicensedIndexOnHwid::pszIndexName = LICENSE_CLIENT_HWID_INDEXNAME;
LPCTSTR __LicensedIndexOnHwid::pszIndexKey = LICENSE_CLIENT_HWID_INDEXNAME_INDEXKEY;
LPCTSTR __LicensedIndexOnMatchHwid::pszIndexName = LICENSE_MATCHHWID_INDEXNAME;
LPCTSTR __LicensedIndexOnMatchHwid::pszIndexKey = LICENSE_MATCHHWID_INDEXNAME_INDEXKEY;
LPCTSTR __LicensedIndexOnExpireDate::pszIndexName = LICENSE_EXPIREDATE_INDEXNAME;
LPCTSTR __LicensedIndexOnExpireDate::pszIndexKey = LICENSE_EXPIREDATE_INDEXNAME_INDEXKEY;
CCriticalSection LicensedTable::g_TableLock;
LPCTSTR LicensedTable::pszTableName = LICENSE_TABLE_NAME;
//-------------------------------------------------------------------
TLSJBIndex
LicensedTable::g_TableIndex[] =
{
// Index on license ID.
{
LICENSE_ID_INDEXNAME,
LICENSE_ID_INDEXNAME_INDEXKEY,
-1,
JET_bitIndexPrimary,
TLSTABLE_INDEX_DEFAULT_DENSITY
},
//
// Index on licensed keypack id.
{
LICENSE_KEYPACKID_INDEXNAME,
LICENSE_KEYPACKID_INDEXNAME_INDEXKEY,
-1,
JET_bitIndexIgnoreNull,
TLSTABLE_INDEX_DEFAULT_DENSITY
},
// index on last modify time.
{
LICENSE_LASTMODIFY_INDEXNAME,
LICENSE_LASTMODIFY_INDEXNAME_INDEXKEY,
-1,
JET_bitIndexIgnoreNull,
TLSTABLE_INDEX_DEFAULT_DENSITY
},
// Index on machine name
{
LICENSE_CLIENT_MACHINENAME_INDEXNAME,
LICENSE_CLIENT_MACHINENAME_INDEXNAME_INDEXKEY,
-1,
0,
TLSTABLE_INDEX_DEFAULT_DENSITY
},
// index on user name
{
LICENSE_CLIENT_USERNAME_INDEXNAME,
LICENSE_CLIENT_USERNAME_INDEXNAME_INDEXKEY,
-1,
0,
TLSTABLE_INDEX_DEFAULT_DENSITY
},
// index on client machine's hardware id
{
LICENSE_CLIENT_HWID_INDEXNAME,
LICENSE_CLIENT_HWID_INDEXNAME_INDEXKEY,
-1,
JET_bitIndexIgnoreNull,
TLSTABLE_INDEX_DEFAULT_DENSITY
},
// index on client hardware id matching hint
{
LICENSE_MATCHHWID_INDEXNAME,
LICENSE_MATCHHWID_INDEXNAME_INDEXKEY,
-1,
JET_bitIndexIgnoreNull,
TLSTABLE_INDEX_DEFAULT_DENSITY
},
// index on license expiration date
{
LICENSE_EXPIREDATE_INDEXNAME,
LICENSE_EXPIREDATE_INDEXNAME_INDEXKEY,
-1,
JET_bitIndexIgnoreNull,
TLSTABLE_INDEX_DEFAULT_DENSITY
},
};
int
LicensedTable::g_NumTableIndex = sizeof(LicensedTable::g_TableIndex) / sizeof(LicensedTable::g_TableIndex[0]);
TLSJBColumn
LicensedTable::g_Columns[] =
{
//
// Entry status
{
LICENSE_COLUMN_ENTRYSTATUS,
JET_coltypUnsignedByte,
0,
JET_bitColumnFixed,
NULL,
0,
TLS_JETBLUE_COLUMN_CODE_PAGE,
TLS_JETBLUE_COLUMN_COUNTRY_CODE,
TLS_JETBLUE_COLUMN_LANGID
},
//
// Licensed ID
{
LICENSE_COLUMN_ID_COLUMN,
JET_coltypLong,
0,
JET_bitColumnFixed | JET_bitColumnNotNULL,
NULL,
0,
TLS_JETBLUE_COLUMN_CODE_PAGE,
TLS_JETBLUE_COLUMN_COUNTRY_CODE,
TLS_JETBLUE_COLUMN_LANGID
},
//
// KeyPackId
{
LICENSE_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
},
//
// KeyPackLicenseId
{
LICENSE_COLUMN_LICENSEID,
JET_coltypLong,
0,
JET_bitColumnFixed,
NULL,
0,
TLS_JETBLUE_COLUMN_CODE_PAGE,
TLS_JETBLUE_COLUMN_COUNTRY_CODE,
TLS_JETBLUE_COLUMN_LANGID
},
//
// Last modify time
{
LICENSE_COLUMN_LASTMODIFYTIME,
JET_coltypBinary,
sizeof(FILETIME),
JET_bitColumnNotNULL,
NULL,
0,
TLS_JETBLUE_COLUMN_CODE_PAGE,
TLS_JETBLUE_COLUMN_COUNTRY_CODE,
TLS_JETBLUE_COLUMN_LANGID
},
//
// SystemBios
{
LICENSE_COLUMN_SYSTEMBIOS,
JET_coltypLong,
0,
JET_bitColumnFixed | JET_bitColumnNotNULL,
NULL,
0,
TLS_JETBLUE_COLUMN_CODE_PAGE,
TLS_JETBLUE_COLUMN_COUNTRY_CODE,
TLS_JETBLUE_COLUMN_LANGID
},
//
// Video Bios
{
LICENSE_COLUMN_VIDEOBIOS,
JET_coltypLong,
0,
JET_bitColumnFixed | JET_bitColumnNotNULL,
NULL,
0,
TLS_JETBLUE_COLUMN_CODE_PAGE,
TLS_JETBLUE_COLUMN_COUNTRY_CODE,
TLS_JETBLUE_COLUMN_LANGID
},
//
// Floppy Bios
{
LICENSE_COLUMN_FLOPPYBIOS,
JET_coltypLong,
0,
JET_bitColumnFixed | JET_bitColumnNotNULL,
NULL,
0,
TLS_JETBLUE_COLUMN_CODE_PAGE,
TLS_JETBLUE_COLUMN_COUNTRY_CODE,
TLS_JETBLUE_COLUMN_LANGID
},
//
// Harddisk size
{
LICENSE_COLUMN_HARDDISKSIZE,
JET_coltypLong,
0,
JET_bitColumnFixed | JET_bitColumnNotNULL,
NULL,
0,
TLS_JETBLUE_COLUMN_CODE_PAGE,
TLS_JETBLUE_COLUMN_COUNTRY_CODE,
TLS_JETBLUE_COLUMN_LANGID
},
//
// RAM size
{
LICENSE_COLUMN_RAMSIZE,
JET_coltypLong,
0,
JET_bitColumnFixed | JET_bitColumnNotNULL,
NULL,
0,
TLS_JETBLUE_COLUMN_CODE_PAGE,
TLS_JETBLUE_COLUMN_COUNTRY_CODE,
TLS_JETBLUE_COLUMN_LANGID
},
//
// Match HWID
{
LICENSE_COLUMN_MATCHHWID,
JET_coltypIEEEDouble,
0,
JET_bitColumnFixed | JET_bitColumnNotNULL,
NULL,
0,
TLS_JETBLUE_COLUMN_CODE_PAGE,
TLS_JETBLUE_COLUMN_COUNTRY_CODE,
TLS_JETBLUE_COLUMN_LANGID
},
//
// Machine name
{
LICENSE_COLUMN_MACHINENAME,
//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
},
//
// User Name
{
LICENSE_COLUMN_USERNAME,
//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
},
//
// Number of licenses for this client
{
LICENSE_COLUMN_NUMLICENSES,
JET_coltypLong,
0,
JET_bitColumnFixed | JET_bitColumnNotNULL,
NULL,
0,
TLS_JETBLUE_COLUMN_CODE_PAGE,
TLS_JETBLUE_COLUMN_COUNTRY_CODE,
TLS_JETBLUE_COLUMN_LANGID
},
//
// IssuedDate
{
LICENSE_COLUMN_ISSUEDATE,
JET_coltypLong,
0,
JET_bitColumnFixed | JET_bitColumnNotNULL,
NULL,
0,
TLS_JETBLUE_COLUMN_CODE_PAGE,
TLS_JETBLUE_COLUMN_COUNTRY_CODE,
TLS_JETBLUE_COLUMN_LANGID
},
//
// ExpireDate
{
LICENSE_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
},
//
// License Status
{
LICENSE_COLUMN_LICENSESTATUS,
JET_coltypUnsignedByte,
0,
JET_bitColumnFixed | JET_bitColumnNotNULL,
NULL,
0,
TLS_JETBLUE_COLUMN_CODE_PAGE,
TLS_JETBLUE_COLUMN_COUNTRY_CODE,
TLS_JETBLUE_COLUMN_LANGID
}
};
int
LicensedTable::g_NumColumns=sizeof(LicensedTable::g_Columns) / sizeof(LicensedTable::g_Columns[0]);
///////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------
BOOL
LicensedTable::ResolveToTableColumn()
/*
*/
{
m_JetErr = ucEntryStatus.AttachToTable(
*this,
LICENSE_COLUMN_ENTRYSTATUS
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = dwKeyPackLicenseId.AttachToTable(
*this,
LICENSE_COLUMN_LICENSEID
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = ftLastModifyTime.AttachToTable(
*this,
LICENSE_COLUMN_LASTMODIFYTIME
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = dwLicenseId.AttachToTable(
*this,
LICENSE_COLUMN_ID_COLUMN
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = dwKeyPackId.AttachToTable(
*this,
LICENSE_COLUMN_KEYPACKID
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = szMachineName.AttachToTable(
*this,
LICENSE_COLUMN_MACHINENAME
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = szUserName.AttachToTable(
*this,
LICENSE_COLUMN_USERNAME
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = ftIssueDate.AttachToTable(
*this,
LICENSE_COLUMN_ISSUEDATE
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = ftExpireDate.AttachToTable(
*this,
LICENSE_COLUMN_EXPIREDATE
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = ucLicenseStatus.AttachToTable(
*this,
LICENSE_COLUMN_LICENSESTATUS
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = dwNumLicenses.AttachToTable(
*this,
LICENSE_COLUMN_NUMLICENSES
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = dwSystemBiosChkSum.AttachToTable(
*this,
LICENSE_COLUMN_SYSTEMBIOS
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = dwVideoBiosChkSum.AttachToTable(
*this,
LICENSE_COLUMN_VIDEOBIOS
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = dwFloppyBiosChkSum.AttachToTable(
*this,
LICENSE_COLUMN_FLOPPYBIOS
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = dwHardDiskSize.AttachToTable(
*this,
LICENSE_COLUMN_HARDDISKSIZE
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = dwRamSize.AttachToTable(
*this,
LICENSE_COLUMN_RAMSIZE
);
if(IsSuccess() == FALSE)
goto cleanup;
m_JetErr = dbLowerBound.AttachToTable(
*this,
LICENSE_COLUMN_MATCHHWID
);
cleanup:
return IsSuccess();
}
//------------------------------------------------------------
inline CLASS_PRIVATE BOOL
LicensedTable::ProcessSingleColumn(
BOOL bFetch,
TLSColumnBase& column,
DWORD offset,
PVOID pbData,
DWORD cbData,
PDWORD pcbDataReturn,
LPCTSTR szColumnName
)
/*
*/
{
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
LicensedTable::ProcessRecord(
LICENSEDCLIENT* licensed,
BOOL bFetch,
DWORD dwParam,
BOOL bUpdate
)
/*
*/
{
DWORD dwSize;
if(bFetch == FALSE)
{
BeginUpdate(bUpdate);
// any update will require update on lastmodifytime column
if(!(dwParam & LICENSE_PROCESS_LASTMODIFYTIME))
{
JB_ASSERT(FALSE);
dwParam |= LICENSE_PROCESS_LASTMODIFYTIME;
}
}
else
{
SetLastJetError(JET_errSuccess);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_KEYPACKLICENSEID)
{
ProcessSingleColumn(
bFetch,
dwKeyPackLicenseId,
0,
&(licensed->dwKeyPackLicenseId),
sizeof(licensed->dwKeyPackLicenseId),
&dwSize,
LICENSE_COLUMN_LICENSEID
);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_LASTMODIFYTIME)
{
ProcessSingleColumn(
bFetch,
ftLastModifyTime,
0,
&(licensed->ftLastModifyTime),
sizeof(licensed->ftLastModifyTime),
&dwSize,
LICENSE_COLUMN_LASTMODIFYTIME
);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_LICENSEID)
{
// primary index, can't change
if(bUpdate == FALSE)
{
ProcessSingleColumn(
bFetch,
dwLicenseId,
0,
&(licensed->dwLicenseId),
sizeof(licensed->dwLicenseId),
&dwSize,
LICENSE_COLUMN_ID_COLUMN
);
}
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_KEYPACKID)
{
ProcessSingleColumn(
bFetch,
dwKeyPackId,
0,
&(licensed->dwKeyPackId),
sizeof(licensed->dwKeyPackId),
&dwSize,
LICENSE_COLUMN_KEYPACKID
);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_MACHINENAME)
{
ProcessSingleColumn(
bFetch,
szMachineName,
0,
licensed->szMachineName,
sizeof(licensed->szMachineName),
&dwSize,
LICENSE_COLUMN_MACHINENAME
);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_USERNAME)
{
ProcessSingleColumn(
bFetch,
szUserName,
0,
licensed->szUserName,
sizeof(licensed->szUserName),
&dwSize,
LICENSE_COLUMN_USERNAME
);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_ISSUEDATE)
{
ProcessSingleColumn(
bFetch,
ftIssueDate,
0,
&(licensed->ftIssueDate),
sizeof(licensed->ftIssueDate),
&dwSize,
LICENSE_COLUMN_ISSUEDATE
);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_EXPIREDATE)
{
ProcessSingleColumn(
bFetch,
ftExpireDate,
0,
&(licensed->ftExpireDate),
sizeof(licensed->ftExpireDate),
&dwSize,
LICENSE_COLUMN_EXPIREDATE
);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_NUMLICENSES)
{
ProcessSingleColumn(
bFetch,
dwNumLicenses,
0,
&(licensed->dwNumLicenses),
sizeof(licensed->dwNumLicenses),
&dwSize,
LICENSE_COLUMN_NUMLICENSES
);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_LICENSESTATUS)
{
ProcessSingleColumn(
bFetch,
ucLicenseStatus,
0,
&(licensed->ucLicenseStatus),
sizeof(licensed->ucLicenseStatus),
&dwSize,
LICENSE_COLUMN_LICENSESTATUS
);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_SYSTEMBIOS)
{
ProcessSingleColumn(
bFetch,
dwSystemBiosChkSum,
0,
&(licensed->dwSystemBiosChkSum),
sizeof(licensed->dwSystemBiosChkSum),
&dwSize,
LICENSE_COLUMN_SYSTEMBIOS
);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_VIDEOBIOS)
{
ProcessSingleColumn(
bFetch,
dwVideoBiosChkSum,
0,
&(licensed->dwVideoBiosChkSum),
sizeof(licensed->dwVideoBiosChkSum),
&dwSize,
LICENSE_COLUMN_VIDEOBIOS
);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_FLOPPYBIOS)
{
ProcessSingleColumn(
bFetch,
dwFloppyBiosChkSum,
0,
&(licensed->dwFloppyBiosChkSum),
sizeof(licensed->dwFloppyBiosChkSum),
&dwSize,
LICENSE_COLUMN_FLOPPYBIOS
);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_HARDDISKSIZE)
{
ProcessSingleColumn(
bFetch,
dwHardDiskSize,
0,
&(licensed->dwHardDiskSize),
sizeof(licensed->dwHardDiskSize),
&dwSize,
LICENSE_COLUMN_HARDDISKSIZE
);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_RAMSIZE)
{
ProcessSingleColumn(
bFetch,
dwRamSize,
0,
&(licensed->dwRamSize),
sizeof(licensed->dwRamSize),
&dwSize,
LICENSE_COLUMN_RAMSIZE
);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_ENTRYSTATUS)
{
ProcessSingleColumn(
bFetch,
ucEntryStatus,
0,
&(licensed->ucEntryStatus),
sizeof(licensed->ucEntryStatus),
&dwSize,
LICENSE_COLUMN_ENTRYSTATUS
);
}
if(IsSuccess() == FALSE)
goto cleanup;
if(dwParam & LICENSE_PROCESS_MATCHHWID)
{
ProcessSingleColumn(
bFetch,
dbLowerBound,
0,
&(licensed->dbLowerBound),
sizeof(licensed->dbLowerBound),
&dwSize,
LICENSE_COLUMN_MATCHHWID
);
}
cleanup:
//
// For inserting/updating record
if(bFetch == FALSE)
{
JET_ERR jetErr;
jetErr = GetLastJetError();
EndUpdate(IsSuccess() == FALSE);
if(jetErr != JET_errSuccess && IsSuccess() == FALSE)
SetLastJetError(jetErr);
}
return IsSuccess();
}
//-------------------------------------------------------
JBKeyBase*
LicensedTable::EnumerationIndex(
BOOL bMatchAll,
DWORD dwParam,
LICENSEDCLIENT* pLicensed,
BOOL* bCompareKey
)
/*
*/
{
JBKeyBase* index=NULL;
*bCompareKey = bMatchAll;
if(dwParam == LICENSE_COLUMN_SEARCH_HWID)
{
if(bMatchAll)
{
index = new TLSLicensedIndexHwid(pLicensed);
}
else
{
index = new TLSLicensedIndexMatchHwid(pLicensed);
}
}
else if(dwParam & LICENSE_PROCESS_KEYPACKID)
{
index = new TLSLicensedIndexKeyPackId(pLicensed);
}
else if(dwParam & LICENSE_PROCESS_MACHINENAME)
{
index = new TLSLicensedIndexMachineName(pLicensed);
}
else if(dwParam & LICENSE_PROCESS_USERNAME)
{
index = new TLSLicensedIndexUserName(pLicensed);
}
else if(dwParam & LICENSE_PROCESS_LASTMODIFYTIME)
{
index = new TLSLicensedIndexLastModifyTime(pLicensed);
}
else if(dwParam & LICENSE_PROCESS_EXPIREDATE)
{
index = new TLSLicensedIndexExpireDate(pLicensed);
}
else
{
// use default primary index for iteration, compare key
// is depends on whether primary index column is in the
// field.
index = new TLSLicensedIndexLicenseId(pLicensed);
*bCompareKey = (bMatchAll && (dwParam & LICENSE_PROCESS_LICENSEID));
}
return index;
}
//-------------------------------------------------------
BOOL
LicensedTable::EqualValue(
LICENSEDCLIENT& s1,
LICENSEDCLIENT& s2,
BOOL bMatchAll,
DWORD dwParam
)
/*
*/
{
BOOL bRetCode = TRUE;
if(dwParam & LICENSE_PROCESS_ENTRYSTATUS)
{
bRetCode = (s1.ucEntryStatus == s2.ucEntryStatus);
if(bMatchAll != bRetCode)
goto cleanup;
}
if(dwParam & LICENSE_PROCESS_KEYPACKLICENSEID)
{
bRetCode = (s1.dwKeyPackLicenseId == s2.dwKeyPackLicenseId);
if(bMatchAll != bRetCode)
goto cleanup;
}
if(dwParam & LICENSE_PROCESS_LASTMODIFYTIME)
{
bRetCode = (CompareFileTime(&s1.ftLastModifyTime, &s2.ftLastModifyTime) == 0);
if(bMatchAll != bRetCode)
goto cleanup;
}
if(dwParam & LICENSE_PROCESS_LICENSEID)
{
bRetCode = (s1.dwLicenseId == s2.dwLicenseId);
if(bMatchAll != bRetCode)
goto cleanup;
}
if(dwParam & LICENSE_PROCESS_KEYPACKID)
{
bRetCode = (s1.dwKeyPackId == s2.dwKeyPackId);
if(bMatchAll != bRetCode)
goto cleanup;
}
if(dwParam & LICENSE_PROCESS_MACHINENAME)
{
bRetCode = (_tcscmp(s1.szMachineName, s2.szMachineName) == 0);
if(bMatchAll != bRetCode)
goto cleanup;
}
if(dwParam & LICENSE_PROCESS_USERNAME)
{
bRetCode = (_tcscmp(s1.szUserName, s2.szUserName) == 0);
if(bMatchAll != bRetCode)
goto cleanup;
}
if(dwParam & LICENSE_PROCESS_ISSUEDATE)
{
bRetCode = (s1.ftIssueDate == s2.ftIssueDate);
if(bMatchAll != bRetCode)
goto cleanup;
}
if(dwParam & LICENSE_PROCESS_EXPIREDATE)
{
bRetCode = (s1.ftExpireDate == s2.ftExpireDate);
if(bMatchAll != bRetCode)
goto cleanup;
}
if(dwParam & LICENSE_PROCESS_NUMLICENSES)
{
bRetCode = (s1.dwNumLicenses == s2.dwNumLicenses);
if(bMatchAll != bRetCode)
goto cleanup;
}
if(dwParam & LICENSE_PROCESS_LICENSESTATUS)
{
bRetCode = (s1.ucLicenseStatus == s2.ucLicenseStatus);
if(bMatchAll != bRetCode)
goto cleanup;
}
if(dwParam & LICENSE_PROCESS_SYSTEMBIOS)
{
bRetCode = (s1.dwSystemBiosChkSum == s2.dwSystemBiosChkSum);
if(bMatchAll != bRetCode)
goto cleanup;
}
if(dwParam & LICENSE_PROCESS_VIDEOBIOS)
{
bRetCode = (s1.dwVideoBiosChkSum == s2.dwVideoBiosChkSum);
if(bMatchAll != bRetCode)
goto cleanup;
}
if(dwParam & LICENSE_PROCESS_FLOPPYBIOS)
{
bRetCode = (s1.dwFloppyBiosChkSum == s2.dwFloppyBiosChkSum);
if(bMatchAll != bRetCode)
goto cleanup;
}
if(dwParam & LICENSE_PROCESS_HARDDISKSIZE)
{
bRetCode = (s1.dwHardDiskSize == s2.dwHardDiskSize);
if(bMatchAll != bRetCode)
goto cleanup;
}
if(dwParam & LICENSE_PROCESS_RAMSIZE)
{
bRetCode = (s1.dwRamSize == s2.dwRamSize);
}
if(dwParam & LICENSE_PROCESS_MATCHHWID)
{
bRetCode = (s1.dbLowerBound == s2.dbLowerBound);
}
cleanup:
return bRetCode;
}
//--------------------------------------------------------
BOOL
LicensedTable::UpgradeTable(
IN DWORD dwOldVersion,
IN DWORD dwNewVersion
)
/*++
++*/
{
int nExpDate = g_NumTableIndex-1;
unsigned long keylength;
BOOL fRet = TRUE;
if(dwOldVersion > dwNewVersion)
{
// We don't know how to handle later versions
JB_ASSERT(FALSE);
return FALSE;
}
if(OpenTable(TRUE, JET_bitTableUpdatable) == FALSE)
return FALSE;
//
// check if expiration date index exists
//
if (DoesIndexExist(g_TableIndex[nExpDate].pszIndexName))
{
goto cleanup;
}
//
// Insert new index for expiration date
//
if (g_TableIndex[nExpDate].cbKey == -1)
{
// calculate index key length
keylength = 2;
while(g_TableIndex[nExpDate].pszIndexKey[keylength-1] != _TEXT('\0') ||
(g_TableIndex[nExpDate].pszIndexKey[keylength-2] != _TEXT('\0')))
{
keylength++;
}
if(keylength >= TLS_JETBLUE_MAX_INDEXKEY_LENGTH)
{
fRet = FALSE;
goto cleanup;
}
}
else
{
keylength = g_TableIndex[nExpDate].cbKey;
}
AddJetIndex(g_TableIndex[nExpDate].pszIndexName,
g_TableIndex[nExpDate].pszIndexKey,
keylength,
g_TableIndex[nExpDate].jbGrbit,
g_TableIndex[nExpDate].ulDensity
);
cleanup:
return CloseTable() && fRet;
}