📄 filedb.cpp
字号:
NULL) ;
#endif
if (INVALID_HANDLE_VALUE == *phDB)
{
OutputMsg(L"ERROR: could not open the created database!: %s\n", tszDBName);
bRtn = FALSE;
goto Cleanup;
}
else
{
OutputMsg(L"OK: opened database: %s\n", tszDBName);
}
Cleanup:
return(bRtn);
}
HANDLE OpenByName(WCHAR *szName)
{
HANDLE hDB = INVALID_HANDLE_VALUE;
SORTORDERSPECEX rgSortSpecs;
CEOID DBOid = 0;
rgSortSpecs.wVersion = SORTORDERSPECEX_VERSION;
rgSortSpecs.wNumProps = 1;
rgSortSpecs.wKeyFlags = 0;
rgSortSpecs.rgPropID[0] = PROPID_NAME;
rgSortSpecs.rgdwFlags[0] = CEDB_SORT_UNKNOWNFIRST;
#ifdef EDB
hDB = CeOpenDatabaseInSession( hSession,
&m_VolGUID,
&DBOid,
szName,
&rgSortSpecs,
CEDB_AUTOINCREMENT,
NULL) ;
#else
hDB = CeOpenDatabaseEx2(&m_VolGUID,
&DBOid,
szName,
&rgSortSpecs,
CEDB_AUTOINCREMENT,
NULL) ;
#endif
return hDB;
}
HANDLE OpenBySize(WCHAR *szName)
{
HANDLE hDB = INVALID_HANDLE_VALUE;
SORTORDERSPECEX rgSortSpecs;
CEOID DBOid = 0;
rgSortSpecs.wVersion = SORTORDERSPECEX_VERSION;
rgSortSpecs.wNumProps = 1;
rgSortSpecs.wKeyFlags = 0;
rgSortSpecs.rgPropID[0] = PROPID_SIZE;
rgSortSpecs.rgdwFlags[0] = CEDB_SORT_UNKNOWNFIRST;
#ifdef EDB
hDB = CeOpenDatabaseInSession( hSession,
&m_VolGUID,
&DBOid,
szName,
&rgSortSpecs,
CEDB_AUTOINCREMENT,
NULL) ;
#else
hDB = CeOpenDatabaseEx2(&m_VolGUID,
&DBOid,
szName,
&rgSortSpecs,
CEDB_AUTOINCREMENT,
NULL) ;
#endif
return hDB;
}
HANDLE OpenByTime(WCHAR *szName)
{
HANDLE hDB = INVALID_HANDLE_VALUE;
SORTORDERSPECEX rgSortSpecs;
CEOID DBOid = 0;
rgSortSpecs.wVersion = SORTORDERSPECEX_VERSION;
rgSortSpecs.wNumProps = 1;
rgSortSpecs.wKeyFlags = 0;
rgSortSpecs.rgPropID[0] = PROPID_TIME;
rgSortSpecs.rgdwFlags[0] = CEDB_SORT_UNKNOWNFIRST;
#ifdef EDB
hDB = CeOpenDatabaseInSession( hSession,
&m_VolGUID,
&DBOid,
szName,
&rgSortSpecs,
CEDB_AUTOINCREMENT,
NULL) ;
#else
hDB = CeOpenDatabaseEx2(&m_VolGUID,
&DBOid,
szName,
&rgSortSpecs,
CEDB_AUTOINCREMENT,
NULL) ;
#endif
return hDB;
}
BOOL DumpDB(HANDLE hDB)
{
CEOID oidRecord;
CEPROPVAL*pRecord = NULL;
WORD wNumProps;
DWORD dwBufSize = 0;
TCHAR szName[MAX_PATH];
DWORD dwSize = 0;
DWORD dwAttr = 0;
FILETIME ft;
SYSTEMTIME st;
oidRecord = CeSeekDatabaseEx(hDB, CEDB_SEEK_BEGINNING, 0, 0, 0);
if (!oidRecord) {
OutputMsg(L"DumPDB: Couldn't seek to beginning of DB!");
return FALSE;
}
WORD i;
#ifdef EDB
while (oidRecord = CeReadRecordPropsEx(hDB, CEDB_ALLOWREALLOC, &wNumProps, NULL, (LPBYTE *)&pRecord, &dwBufSize, NULL)) {
#else
while (oidRecord = CeReadRecordProps(hDB, CEDB_ALLOWREALLOC, &wNumProps, NULL, (LPBYTE *)&pRecord, &dwBufSize)) {
#endif
TestOids(&m_VolGUID, oidRecord);
for (i = 0; i < wNumProps; i++) {
switch(pRecord[i ].propid) {
case PROPID_NAME:
wcscpy( szName, pRecord[i].val.lpwstr);
break;
case PROPID_TIME:
ft = pRecord[i].val.filetime;
break;
case PROPID_ATTR:
dwAttr = pRecord[i].val.uiVal;
break;
case PROPID_SIZE:
dwSize = pRecord[i].val.uiVal;
break;
default:
OutputMsg(L"Unknown propid !!!!\r\n");
DebugBreak();
break;
}
}
FileTimeToSystemTime(&ft, &st);
OutputMsg(L"%30s %10ld %02d/%02d/%02d %02d:%02d %c%c%c\r\n",
szName,
dwSize,
st.wMonth, st.wDay, st.wYear,
st.wHour, st.wMinute,
dwAttr & FILE_ATTRIBUTE_DIRECTORY ? L'D' : L' ',
dwAttr & FILE_ATTRIBUTE_SYSTEM ? L'S' : L' ',
dwAttr & FILE_ATTRIBUTE_HIDDEN ? L'H' : L' ');
}
LocalFree(pRecord);
return TRUE;
}
//
// Sorts the database using a specific locale.
//
BOOL TestDatabaseSortLCID(LPWSTR lpLocaleString)
{
LPWSTR pszTmp;
DWORD dwLCID = wcstoul(lpLocaleString, &pszTmp, 16);
HANDLE hDB = INVALID_HANDLE_VALUE;
OutputMsg( L"Setting LCID=%08X\r\n", dwLCID);
// has no return value-- assume success
//
CeChangeDatabaseLCID(&m_VolGUID, dwLCID);
// string sort
hDB = OpenByName(pszDBName);
OutputMsg( L"Sorting by name\r\n");
OutputMsg( L"--------------------------------------------------------\r\n");
if (!DumpDB(hDB)) {
OutputMsg(L"ERROR: could not dump the database!!\n");
goto Cleanup;
}
CloseHandle(hDB);
// dword sort
hDB = OpenBySize(pszDBName);
OutputMsg( L"Sorting by size\r\n");
OutputMsg( L"----------------------------------------------------------\r\n");
if (!DumpDB(hDB)) {
OutputMsg(L"ERROR: could not dump the database!!\n");
goto Cleanup;
}
CloseHandle(hDB);
// file time sort
hDB = OpenByTime(pszDBName);
OutputMsg( L"Sorting by time\r\n");
OutputMsg( L"----------------------------------------------------------\r\n");
if (!DumpDB(hDB)) {
OutputMsg(L"ERROR: could not dump the database!!\n");
goto Cleanup;
}
CloseHandle(hDB);
hDB = INVALID_HANDLE_VALUE;
return TRUE;
Cleanup:
// Close the database if still open
if(INVALID_HANDLE_VALUE != hDB)
{
CloseHandle(hDB);
}
return FALSE;
}
//
// Main entry point.
//
BOOL WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
HANDLE hDB = INVALID_HANDLE_VALUE;
//
// 1. Verify condition of exising Volume - this is where we detect
// corruption. CreateDB (or Mount)
if(! CreateDB(&hDB, pszDBName))
{
goto Cleanup;
}
//
// 2. Create Table & Add records
if(! PopulateDB(hDB, FALSE))
{
OutputMsg(L"ERROR: could not populate the database!!\n");
goto Cleanup;
}
//
// 3. Flush baseline Database: schema + data - this must always pass
if(! CeFlushDBVol(&m_VolGUID))
{
OutputMsg(L"ERROR: could not flush baseline database scheema!: %d\n", GetLastError());
goto Cleanup;
}
CloseHandle(hDB);
hDB = INVALID_HANDLE_VALUE;
//
// 4. Call EnumSystemLocales using "0409" LOCALE.
LPWSTR lpLocale = L"0409\0";
TestDatabaseSortLCID(lpLocale);
Cleanup:
#ifdef EDB
// Close the session if still open
if(INVALID_HANDLE_VALUE != hSession)
{
CloseHandle(hSession);
}
#endif
// Close the database if still open
if(INVALID_HANDLE_VALUE != hDB)
{
CloseHandle(hDB);
}
return(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -