Leaked source code of windows server 2003
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.
 
 
 
 
 
 

170 lines
4.4 KiB

/*++
Copyright (c) 2000-2001 Microsoft Corporation
Module Name:
volstate.h
Abstract:
Contains definition of the volume state class. This class
maintains state about one volume.
Author:
Stefan R. Steiner [ssteiner] 03-14-2000
Revision History:
--*/
#ifndef __H_VOLSTATE_
#define __H_VOLSTATE_
#include "exclproc.h"
#include "vs_hash.h"
#include "hardlink.h"
//
// Definition of the volume id
//
struct SFsdVolumeId
{
DWORD m_dwVolSerialNumber;
inline BOOL IsEqual(
IN SFsdVolumeId *psVolid
)
{
return m_dwVolSerialNumber == psVolid->m_dwVolSerialNumber;
}
};
//
// Forward define
//
class CFsdVolumeState;
//
// Definition of the list of volume state objects with SFsdVolumeId key.
//
typedef TBsHashMap< SFsdVolumeId, CFsdVolumeState * > FSD_VOLUME_STATE_LIST;
class CFsdVolumeStateManager
{
public:
CFsdVolumeStateManager(
IN CDumpParameters *pcDumpParameters
);
virtual ~CFsdVolumeStateManager();
DWORD GetVolumeState(
IN const CBsString& cwsVolumePath,
OUT CFsdVolumeState **ppcVolState
);
VOID PrintExclusionInformation()
{
// Pass the buck...
m_pcExclManager->PrintExclusionInformation();
}
VOID PrintHardLinkInfo();
static DWORD CFsdVolumeStateManager::GetVolumeIdAndPath(
IN CDumpParameters *pcDumpParameters,
IN const CBsString& cwsPathOnVolume,
OUT SFsdVolumeId *psVolId,
OUT CBsString& cwsVolPath
);
private:
CDumpParameters *m_pcParams;
CFsdExclusionManager *m_pcExclManager;
FSD_VOLUME_STATE_LIST m_cVolumeStateList;
};
class CFsdVolumeState
{
friend class CFsdVolumeStateManager;
public:
CFsdVolumeState(
IN CDumpParameters *pcDumpParameters,
IN const CBsString& cwsVolumePath
) : m_pcParams( pcDumpParameters ),
m_cHardLinkManager( pcDumpParameters, cwsVolumePath.GetLength() ),
m_cwsVolumePath( cwsVolumePath ),
m_pcFSExclProcessor( NULL ),
m_dwFileSystemFlags( 0 ),
m_dwMaxComponentLength( 0 ),
m_dwVolSerialNumber( 0 ) { }
virtual ~CFsdVolumeState()
{
delete m_pcFSExclProcessor;
}
//
// DirPath is relative to this volume
//
inline BOOL IsExcludedFile(
IN const CBsString &cwsFullDirPath,
IN DWORD dwEndOfVolMountPointOffset,
IN const CBsString &cwsFileName
)
{
if ( m_pcFSExclProcessor == NULL )
return FALSE;
return m_pcFSExclProcessor->IsExcludedFile( cwsFullDirPath, dwEndOfVolMountPointOffset, cwsFileName );
}
inline BOOL IsNtfs() { return ( m_dwFileSystemFlags & FS_PERSISTENT_ACLS ); }
inline LPCWSTR GetFileSystemName() { return m_cwsFileSystemName.c_str(); }
inline LPCWSTR GetVolumePath() { return m_cwsVolumePath.c_str(); }
BOOL IsHardLinkInList(
IN ULONGLONG ullFileIndex,
IN const CBsString& cwsDirPath,
IN const CBsString& cwsFileName,
OUT WIN32_FILE_ATTRIBUTE_DATA *psFileAttributeData,
OUT SFileExtendedInfo *psExtendedInfo
)
{
return m_cHardLinkManager.IsHardLinkInList( ullFileIndex, cwsDirPath, cwsFileName, psFileAttributeData, psExtendedInfo );
}
VOID AddHardLinkToList(
IN ULONGLONG ullFileIndex,
IN const CBsString& cwsDirPath,
IN const CBsString& cwsFileName,
IN WIN32_FILE_ATTRIBUTE_DATA *psFileAttributeData,
IN SFileExtendedInfo *psExtendedInfo
)
{
m_cHardLinkManager.AddHardLinkToList( ullFileIndex, cwsDirPath, cwsFileName, psFileAttributeData, psExtendedInfo );
}
VOID PrintHardLinkInfo()
{
//
// Pass it on...
//
m_cHardLinkManager.PrintHardLinkInfo();
}
private:
CFsdVolumeState(); // No copying please
CDumpParameters *m_pcParams;
CBsString m_cwsVolumePath; // Path to the volume
CBsString m_cwsFileSystemName;
CFsdHardLinkManager m_cHardLinkManager;
CFsdFileSystemExcludeProcessor *m_pcFSExclProcessor;
DWORD m_dwFileSystemFlags; // GetVolumeInformation() fs flags
DWORD m_dwMaxComponentLength;
DWORD m_dwVolSerialNumber; // Should be volume GUID
};
#endif // __H_VOLSTATE_