Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File: cBFile.cpp
//
// Contents: Microsoft Internet Security Certificate Class
//
// History: 24-Oct-1997 pberkman created
//
//--------------------------------------------------------------------------
#ifndef CBFILE_HXX
#define CBFILE_HXX
#pragma pack(8)
#define BFILE_VERSION_1 0x0001
typedef struct BFILE_HEADER_ { DWORD fDirty : 1; DWORD sVersion : 16; DWORD dwFiller1 : 15; DWORD sIntVersion : 16; DWORD dwFiller2 : 16; DWORD cbSortedEOF; DWORD cbKey; DWORD cbData;
DWORD dwLastRecNum;
DWORD dwFiller3;
} BFILE_HEADER;
typedef struct BFILE_RECORD_ { DWORD dwRecNum; DWORD cbKey; void *pvKey; DWORD cbDataOffset; DWORD cbData; void *pvData;
DWORD fDeleted : 1; DWORD dwFiller1 : 31;
} BFILE_RECORD;
#ifdef _WIN64
#define BFILE_SIZEOFSIG 8
#else
#define BFILE_SIZEOFSIG 6
#endif
#define BFILE_SIG "CBFILE"
#define BFILE_KEYEXT L".cbk"
#define BFILE_DATAEXT L".cbd"
#define BFILE_HEADERSIZE (sizeof(BFILE_HEADER) + BFILE_SIZEOFSIG)
#define BFILE_KEYSIZE (sHeader.cbKey + sizeof(DWORD))
#define BFILE_RECSIZE (sizeof(DWORD) + sHeader.cbData)
#pragma pack()
class cBFile_ { public: cBFile_(CRITICAL_SECTION *pCriticalSection, WCHAR *pwszBFilePath, WCHAR *pwszBFileBaseName, DWORD cbKey, DWORD cbData, SHORT sVersion, BOOL *pfCreatedOK); virtual ~cBFile_(void);
BOOL Initialize(void);
void setKey(void *pvInKey); void setData(void *pvInData);
DWORD KeySize(void) { return(sHeader.cbKey); }
void *getKey(void) { return(sRecord.pvKey); } void *getData(void) { return(sRecord.pvData); }
DWORD getRecNum(void) { return(sRecord.dwRecNum); } DWORD getKeyNum(void) { return(dwFirstNextRecNum); }
DWORD getVersion(void) { return(sHeader.sVersion); }
void UseRecNumAsKey(BOOL fUse) { fUseRecNumAsKey = fUse; }
BOOL Find(void); BOOL Update(void); BOOL Add(void); void Sort(void);
BOOL GetFirst(void); BOOL GetNext(DWORD dwCurRec = 0xffffffff); BOOL GetPrev(DWORD dwCurRec = 0xffffffff);
DWORD GetNumKeys(void);
BOOL GetHeader(BFILE_HEADER *psHeader); void *GetDumpKey(DWORD dwIdx, void *pvRetKey, DWORD *pdwRecOffset);
protected: BOOL BinaryFind(DWORD *pcbDataOffset); BOOL GetDataRecord(DWORD cbDataOffset); void UpdateDataRecord(DWORD cbDataOffset); BOOL AddDirtyKey(void); DWORD AddDataRecord(void); BOOL UpdateHeader(void); BOOL ReadHeader(void);
private: CRITICAL_SECTION *pCritical; BOOL fInitialized; BOOL fReadOnly; BOOL fDirty; BOOL fUseRecNumAsKey; BFILE_HEADER sHeader; BFILE_RECORD sRecord; HANDLE hKFile; HANDLE hDFile; BYTE *pbKMap; DWORD cbKMap; BYTE *pbDMap; DWORD cbDMap; HANDLE hDMutex; WCHAR *pwszPath; WCHAR *pwszBaseName; DWORD dwFirstNextRecNum;
BOOL OpenFiles(void); BOOL Lock(void); BOOL Unlock(void); BOOL RemapKey(void); BOOL RemapData(void); void UnmapAll(void); void SpeedSort(void); DWORD GetInsertionPoint(void *pvIn); };
#endif // CBFILE_HXX
|