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.
136 lines
3.8 KiB
136 lines
3.8 KiB
/*++
|
|
|
|
Copyright (c) 2000-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
exclproc.h
|
|
|
|
Abstract:
|
|
|
|
Exclude processing mechanism. Processes the FilesNotToBackup key and
|
|
zero or more exclude files with exclude rules.
|
|
|
|
Author:
|
|
|
|
Stefan R. Steiner [ssteiner] 03-21-2000
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef __H_EXCLPROC_
|
|
#define __H_EXCLPROC_
|
|
|
|
#define FSD_REG_EXCLUDE_PATH L"SYSTEM\\CurrentControlSet\\Control\\BackupRestore\\FilesNotToBackup"
|
|
|
|
struct SFsdVolumeId;
|
|
|
|
//
|
|
// Structure definition of one exclude rule
|
|
//
|
|
class SFsdExcludeRule
|
|
{
|
|
public:
|
|
CBsString cwsExcludeFromSource; // File name or key name
|
|
CBsString cwsExcludeDescription; // Description of the exclusion rule
|
|
CBsString cwsExcludeRule; // The actual exclude pattern
|
|
|
|
// Compiled match string fields follow:
|
|
BOOL bInvalidRule; // If TRUE, rule was deemed invalid by pattern compiler
|
|
BOOL bAnyVol; // If TRUE, matches any volume in the system
|
|
SFsdVolumeId *psVolId; // If bAnyVol is FALSE, volid of the file system
|
|
CBsString cwsDirPath; // Directory path relative to volume mountpoint (no \ at start of string, \ at end of string)
|
|
CBsString cwsFileNamePattern; // File name pattern; may include * and ? chars (no \ at start of string)
|
|
BOOL bInclSubDirs; // If TRUE, include subdirectories under cwsDirPath
|
|
BOOL bWCInFileName; // If TRUE, Wildcard chars in the file name
|
|
CVssDLList< CBsString > cExcludedFileList; // List of files excluded by this rule
|
|
|
|
SFsdExcludeRule() : bAnyVol( FALSE ),
|
|
bInclSubDirs( FALSE ),
|
|
bWCInFileName( FALSE ),
|
|
psVolId( NULL ),
|
|
bInvalidRule( FALSE ) {}
|
|
virtual ~SFsdExcludeRule();
|
|
|
|
VOID PrintRule(
|
|
IN FILE *fpOut,
|
|
IN BOOL bInvalidRulePrint
|
|
);
|
|
};
|
|
|
|
class CFsdFileSystemExcludeProcessor;
|
|
|
|
//
|
|
// Class that maintains the complete list of exclusion rules. There should be one of
|
|
// these objects per base mountpoint. This object will manage mountpoints within that
|
|
// mountpoint.
|
|
//
|
|
class CFsdExclusionManager
|
|
{
|
|
public:
|
|
CFsdExclusionManager(
|
|
IN CDumpParameters *pcDumpParameters
|
|
);
|
|
|
|
virtual ~CFsdExclusionManager();
|
|
|
|
VOID GetFileSystemExcludeProcessor(
|
|
IN CBsString cwsVolumePath,
|
|
IN SFsdVolumeId *psVolId,
|
|
OUT CFsdFileSystemExcludeProcessor **ppcFSExcludeProcessor
|
|
);
|
|
|
|
VOID PrintExclusionInformation();
|
|
|
|
private:
|
|
VOID ProcessRegistryExcludes(
|
|
IN HKEY hKey,
|
|
IN LPCWSTR pwszFromSource
|
|
);
|
|
|
|
VOID ProcessExcludeFiles(
|
|
IN const CBsString& cwsPathToExcludeFiles
|
|
);
|
|
|
|
BOOL ProcessOneExcludeFile(
|
|
IN const CBsString& cwsExcludeFileName
|
|
);
|
|
|
|
VOID CompileExclusionRules();
|
|
|
|
CDumpParameters *m_pcParams;
|
|
CVssDLList< SFsdExcludeRule * > m_cCompleteExcludeList; // pointers cleaned up in destructor
|
|
};
|
|
|
|
//
|
|
// Class that maintains the list of exclusion rules for one particular file system.
|
|
//
|
|
class CFsdFileSystemExcludeProcessor
|
|
{
|
|
friend class CFsdExclusionManager;
|
|
|
|
public:
|
|
CFsdFileSystemExcludeProcessor(
|
|
IN CDumpParameters *pcDumpParameters,
|
|
IN const CBsString& cwsVolumePath,
|
|
IN SFsdVolumeId *psVolId
|
|
);
|
|
|
|
virtual ~CFsdFileSystemExcludeProcessor();
|
|
|
|
BOOL IsExcludedFile(
|
|
IN const CBsString &cwsFullDirPath,
|
|
IN DWORD dwEndOfVolMountPointOffset,
|
|
IN const CBsString &cwsFileName
|
|
);
|
|
|
|
private:
|
|
CDumpParameters *m_pcParams;
|
|
CBsString m_cwsVolumePath;
|
|
SFsdVolumeId *m_psVolId;
|
|
CVssDLList< SFsdExcludeRule * > m_cFSExcludeList;
|
|
};
|
|
|
|
#endif // __H_EXCLPROC_
|
|
|