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.
101 lines
2.6 KiB
101 lines
2.6 KiB
/************************************************************************
|
|
|
|
Copyright (c) 2000 - 2000 Microsoft Corporation
|
|
|
|
Module Name :
|
|
|
|
metadata.h
|
|
|
|
Abstract :
|
|
|
|
Main header for code for reading and writting to the metadata.
|
|
|
|
Author :
|
|
|
|
Revision History :
|
|
|
|
***********************************************************************/
|
|
|
|
// These functions may throw a ComError.
|
|
//
|
|
void SafeWriteFile( HANDLE hFile, void *pBuffer, DWORD dwSize );
|
|
void SafeReadFile( HANDLE hFile, void *pBuffer, DWORD dwSize );
|
|
void SafeWriteStringHandle( HANDLE hFile, StringHandle & str );
|
|
StringHandle SafeReadStringHandle( HANDLE hFile );
|
|
|
|
void SafeWriteFile( HANDLE hFile, WCHAR * str );
|
|
void SafeReadFile( HANDLE hFile, WCHAR ** pStr );
|
|
|
|
|
|
void SafeWriteSid( HANDLE hFile, SidHandle & Sid );
|
|
void SafeReadSid( HANDLE hFile, SidHandle & sid );
|
|
|
|
template <class T>
|
|
void SafeWriteFile( HANDLE hFile, T Data )
|
|
{
|
|
SafeWriteFile( hFile, &Data, sizeof( Data ) );
|
|
}
|
|
|
|
template <class T>
|
|
void SafeReadFile( HANDLE hFile, T *pBuffer)
|
|
{
|
|
SafeReadFile( hFile, pBuffer, sizeof(*pBuffer) );
|
|
}
|
|
|
|
void SafeWriteBlockBegin( HANDLE hFile, GUID BlockGuid );
|
|
void SafeWriteBlockEnd( HANDLE hFile, GUID BlockGuid );
|
|
void SafeReadBlockBegin( HANDLE hFile, GUID BlockGuid );
|
|
void SafeReadBlockEnd( HANDLE hFile, GUID BlockGuid );
|
|
|
|
//
|
|
// allows any one of several GUIDs.
|
|
//
|
|
int SafeReadGuidChoice( HANDLE hFile, const GUID * guids[] );
|
|
|
|
|
|
class CQmgrStateFiles
|
|
{
|
|
auto_FILE_HANDLE m_Files[2];
|
|
auto_ptr<WCHAR> m_FileNames[2];
|
|
UINT64 m_ExpandSize[2];
|
|
INT64 m_OriginalFileSizes[2];
|
|
DWORD m_CurrentIndex;
|
|
|
|
static auto_ptr<WCHAR> GetNameFromIndex( DWORD dwIndex );
|
|
static auto_FILE_HANDLE OpenMetadataFile( auto_ptr<WCHAR> FileName );
|
|
static void WriteEmptyMetadataFile( HANDLE hFile );
|
|
|
|
public:
|
|
CQmgrStateFiles();
|
|
HANDLE GetNextStateFile();
|
|
void UpdateStateFile();
|
|
HANDLE GetCurrentStateFile();
|
|
|
|
void ExtendMetadata( INT64 ExtendAmount = ( METADATA_PREALLOC_SIZE + METADATA_PADDING ) );
|
|
void ShrinkMetadata();
|
|
};
|
|
|
|
class CQmgrReadStateFile
|
|
{
|
|
private:
|
|
CQmgrStateFiles & m_StateFiles;
|
|
HANDLE m_FileHandle;
|
|
|
|
public:
|
|
CQmgrReadStateFile( CQmgrStateFiles & StateFiles );
|
|
HANDLE GetHandle() { return m_FileHandle;}
|
|
void ValidateEndOfFile();
|
|
};
|
|
|
|
|
|
class CQmgrWriteStateFile
|
|
{
|
|
private:
|
|
CQmgrStateFiles & m_StateFiles;
|
|
HANDLE m_FileHandle;
|
|
|
|
public:
|
|
CQmgrWriteStateFile( CQmgrStateFiles & StateFiles );
|
|
HANDLE GetHandle() { return m_FileHandle;}
|
|
void CommitFile();
|
|
};
|