/****************************************************************************** Copyright (c) 1999 Microsoft Corporation Module Name: CFLBuilder.h Abstract: see CFLBuilder.cpp Revision History: Eugene Mesgar (eugenem) 6/16/99 created ******************************************************************************/ #ifndef __FLBUILDER__ #define __FLBUILDER__ #include "xmlparser.h" // // Local Data structres. // typedef struct flFileListTag FL_FILELIST, *LPFL_FILELIST; struct flFileListTag { LPTSTR szFileName; TCHAR chType; LPFL_FILELIST pNext; }; typedef struct flTreeNodeTag FLTREE_NODE, *LPFLTREE_NODE; struct flTreeNodeTag { LPTSTR szPath; TCHAR chType; // // hashlist info // LPFL_FILELIST pFileList; LONG lNumFilesHashed; LONG lFileDataSize; // # of chars in data file LPFLTREE_NODE pParent; LPFLTREE_NODE pChild; LPFLTREE_NODE pSibling; // // long node number // LONG lNodeNumber; // // is this a protected directory // BOOL fDisableDirectory; }; class CFLDatBuilder { LONG m_lNodeCount, m_lFileListCount; LONG m_lNumFiles, m_lNumChars; // // xml parser // CXMLFileListParser m_XMLParser; // // tree root node // LPFLTREE_NODE m_pRoot; // // default node type // TCHAR m_chDefaultType; HANDLE m_hHeapToUse; public: BOOL BuildTree(LPCTSTR pszFile, LPCTSTR pszOutFile); BOOL VerifyVxdDat(LPCTSTR pszFile); CFLDatBuilder(); virtual ~CFLDatBuilder(); private: LPFLTREE_NODE CreateNode(LPTSTR szPath, TCHAR chType, LPFLTREE_NODE pParent, BOOL fDisable); LPFL_FILELIST CreateList(); void PrintTree(LPFLTREE_NODE pTree, LONG lLevel); void PrintList(LPFL_FILELIST pList, LONG lLevel); // // nulls list and recurses // BOOL DeleteTree(LPFLTREE_NODE pTree); BOOL DeleteList(LPFL_FILELIST pList); // // This is for files or directories like *:\Recycle Bin // BOOL AddMetaDriveFileDir( LPTSTR szInPath, TCHAR chType, BOOL fFile, BOOL fDisable ); BOOL AddTreeNode(LPFLTREE_NODE *pParent, LPTSTR szFullPath, TCHAR chType, LONG lNumElements, LONG lLevel, BOOL fFile, BOOL fDisable); BOOL AddFileToList(LPFLTREE_NODE pNode, LPFL_FILELIST *pList, LPTSTR szFile, TCHAR chType); LONG CountTokens(LPTSTR szStr, TCHAR chDelim); LPTSTR _MyStrDup( LPTSTR szIn ); LONG GetNextHighestPrime( LONG lNumber ); BOOL IsPrime(LONG lNumber); LONG CalculateNumberOfHashBuckets( LPFLTREE_NODE pRoot ); BOOL ConvertToInternalFormat ( LPTSTR szBuf, LPTSTR szBuf2 ); // // Additional info merging routines // DWORD SetPrivilegeInAccessToken( LPCTSTR pszPrivilegeName ); BOOL MergeUserRegistryInfo( LPCTSTR pszUserProfilePath, LPCTSTR pszUserProfileHive, LPCTSTR pszUserSid ); BOOL AddUserProfileInfo( HKEY hKeyUser, LPCTSTR pszUserProfilePath ); BOOL AddNodeForKeyValue( HKEY hKeyUser, LPCTSTR pszSubKey, LPCTSTR pszValue ); BOOL AddRegistrySnapshotEntry(LPTSTR pszPath); BOOL MergeFilesNotToBackupInfo( ); BOOL MergeDriveTableInfo( ); BOOL MergeAllUserRegistryInfo( ); BOOL MergeSfcDllCacheInfo( ); }; #endif