/*++ 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_