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.
 
 
 
 
 
 

242 lines
6.7 KiB

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 2000.
//
// File: PSTORE.HXX
//
// Contents: Physical storage + transactions
//
// Classes: CiStorage
//
// History: 13-Jul-93 BartoszM Created
//
//----------------------------------------------------------------------------
#pragma once
class PMmStream;
class PDirectory;
class PIndexTable;
class CTransaction;
class CStorageObject;
class CStorageTransaction;
class CFreshTableIter;
class CPersFresh;
class CFresh;
class PRcovStorageObj;
class PStorage;
enum IndexType;
typedef CDynArrayInPlace<INDEXID> CIndexIdList;
//+---------------------------------------------------------------------------
//
// Class: PStorageObject
//
// Purpose: Encapsulate file control block
//
// History: 24-Aug-93 BartoszM Created
//
//----------------------------------------------------------------------------
class PStorageObject
{
public:
PStorageObject();
virtual ~PStorageObject() {}
virtual void Close() = 0;
};
//+---------------------------------------------------------------------------
//
// Class: SStorageObject
//
// Purpose: Smart pointer to storage object
//
// History: 24-Aug-93 BartoszM Created
//
//----------------------------------------------------------------------------
class SStorageObject
{
public:
SStorageObject ( PStorageObject* pObj );
~SStorageObject();
PStorageObject& GetObj() { return *_pObj; }
PStorageObject* operator->() { return _pObj; }
PStorageObject * Acquire()
{ PStorageObject * temp = _pObj; _pObj = NULL; return temp; }
private:
PStorageObject* _pObj;
};
//+---------------------------------------------------------------------------
//
// Class: SStorage
//
// Purpose: Smart pointer to storage
//
// History: 29-Aug-94 DwightKr Created
//
//----------------------------------------------------------------------------
class SStorage
{
public:
SStorage ( PStorage* pObj );
~SStorage();
PStorage & GetObj() { return *_pObj; }
PStorage * operator->() { return _pObj; }
PStorage * Acquire()
{ PStorage * temp = _pObj; _pObj = NULL; return temp; }
private:
PStorage * _pObj;
};
//+-------------------------------------------------------------------------
//
// Class: CiStorage
//
// Purpose: Encapsulates a physical storage
//
// Interface:
//
// History: 13-Jul-93 BartoszM Created
// 21-Jan-94 SrikantS Added Mutex Sem
// 19-Nov-93 DwightKr Added QueryFreshSnapStream() &
// QueryFreshSnapLog() methods
// 21-Jan-94 SrikantS Added Mutex Sem
// 03-Mar-98 KitmanH Added IsReadOnly() pure virtual method
// 17-Mar-98 KitmanH Added QueryStringHash(),
// QueryFileIdMap() & QueryDeletionLog()
// pure virtual methods
//
//--------------------------------------------------------------------------
class PStorage
{
public:
enum EOpenMode { eCreate, eOpenForWrite, eOpenForRead };
enum EBitOperation{ eSetBits, eClearBits };
enum EDefaultStrmType { eRcovHdr, eNonSparseIndex, eSparseIndex };
enum EChangeLogType { ePrimChangeLog, eSecChangeLog };
virtual ~PStorage() {}
virtual PIndexTable* QueryIndexTable ( CTransaction& xact ) = 0;
virtual PRcovStorageObj * QueryIdxTableObject() = 0;
virtual WORKID CreateObjectId (INDEXID iid, EDefaultStrmType eType ) = 0;
virtual PStorageObject* QueryObject( WORKID objectId ) = 0;
virtual void DeleteObject ( WORKID objectId ) = 0;
virtual void EmptyIndexList () = 0;
virtual PMmStream* QueryNewIndexStream ( PStorageObject& obj, BOOL isSparse=FALSE )=0;
virtual PMmStream* QueryExistingIndexStream ( PStorageObject& obj,
EOpenMode mode ) = 0;
virtual PMmStream* DupExistingIndexStream( PStorageObject& obj,
PMmStream & mmStream,
EOpenMode mode ) = 0;
virtual PMmStream* QueryNewHashStream ( PStorageObject& obj )=0;
virtual PMmStream* QueryExistingHashStream ( PStorageObject& obj,
EOpenMode mode ) = 0;
virtual PMmStream* QueryStringHash() = 0;
virtual PMmStream* QueryFileIdMap() = 0;
virtual PMmStream* QueryDeletionLog() = 0;
virtual PDirectory* QueryNewDirectory ( PStorageObject& obj )=0;
virtual PDirectory* QueryExistingDirectory ( PStorageObject& obj,
EOpenMode mode ) = 0;
virtual BOOL RemoveObject ( WORKID iid ) = 0;
virtual BOOL RemoveMMLog( WORKID objectId ) = 0;
virtual void CommitTransaction() = 0;
virtual void AbortTransaction() = 0;
virtual void CheckPoint() = 0;
virtual WORKID GetSpecialItObjectId( IndexType it ) const = 0;
virtual void SetSpecialItObjectId( IndexType it, WORKID wid ) = 0;
virtual WORKID GetNewObjectIdForFreshLog() = 0;
virtual BOOL RemoveFreshLog( WORKID objectId ) = 0;
virtual void InitRcovObj( WORKID wid, BOOL fAtomStrmOnly = FALSE ) = 0;
virtual PRcovStorageObj * QueryRecoverableLog(WORKID) = 0;
virtual PRcovStorageObj * QueryChangeLog(WORKID, EChangeLogType) = 0;
virtual PRcovStorageObj * QueryFreshLog( WORKID wid ) = 0;
virtual PRcovStorageObj * QueryMMergeLog(WORKID) = 0;
//
// used for testing recoverable storage objects.
//
virtual PRcovStorageObj * QueryTestLog() = 0;
//
// Used for double buffering in OFS.
//
virtual void GetDiskSpace( __int64 & diskTotal, __int64 & diskRemaining ) = 0;
virtual const WCHAR * GetVolumeName() = 0;
virtual USN GetNextUsn() = 0;
virtual BOOL IsVolumeClean() = 0;
virtual void ReportCorruptComponent( WCHAR const * pwszString ) = 0;
virtual void DeleteAllFiles() = 0;
virtual void DeleteAllCiFiles() = 0;
virtual void DeleteAllPersIndexes() = 0;
virtual void DeleteUnUsedPersIndexes( CIndexIdList const & iidsInUse ) = 0;
virtual void DeleteAllFsCiFiles() = 0;
virtual void CopyGivenFile( WCHAR const * pwszFilePath, BOOL fMoveOk ) = 0;
//
// Get the storage's version stamp.
//
virtual ULONG GetStorageVersion() const = 0;
virtual BOOL SupportsShrinkFromFront() const { return FALSE; }
virtual BOOL IsReadOnly() const = 0;
virtual BOOL FavorReadAhead() const = 0;
virtual void SetFavorReadAhead( BOOL f ) = 0;
};