1155 lines
28 KiB
C++
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;
|
|
}
|