//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1997 - 1999 // // File: purge.h // //-------------------------------------------------------------------------- #ifndef __CSCUI_PURGE_H #define __CSCUI_PURGE_H // // Definitions for the dwFlags bits in PurgeCache(). // #define PURGE_FLAG_NONE 0x00000000 #define PURGE_FLAG_PINNED 0x00000001 #define PURGE_FLAG_UNPINNED 0x00000002 #define PURGE_FLAG_ALL 0x00000003 #define PURGE_IGNORE_ACCESS 0x80000000 // // Phase identification constants specified in dwPhase argument to PurgeCache // and returned in PURGECALLBACKINFO.dwPhase. // #define PURGE_PHASE_SCAN 0 #define PURGE_PHASE_DELETE 1 class CCachePurger; // fwd decl. // // Purge callback function pointer type. // typedef BOOL (CALLBACK * LPFNPURGECALLBACK)(CCachePurger *pPurger); class CCachePurgerSel { public: CCachePurgerSel(void) : m_dwFlags(0), m_hdpaShares(DPA_Create(8)), m_psidUser(NULL) { }; ~CCachePurgerSel(void); DWORD Flags(void) const { return m_dwFlags; } BOOL SetUserSid(PSID psid); PSID UserSid(void) const { return m_psidUser; } int ShareCount(void) const { return m_hdpaShares ? DPA_GetPtrCount(m_hdpaShares) : 0; } LPCTSTR ShareName(int iShare) const { return m_hdpaShares ? (LPCTSTR)DPA_GetPtr(m_hdpaShares, iShare) : NULL; } DWORD SetFlags(DWORD dwFlags) { m_dwFlags = dwFlags; return m_dwFlags; } DWORD AddFlags(DWORD dwFlags) { m_dwFlags |= dwFlags; return m_dwFlags; } BOOL AddShareName(LPCTSTR pszShare); private: DWORD m_dwFlags; HDPA m_hdpaShares; PSID m_psidUser; LPTSTR MyStrDup(LPCTSTR psz); // // Prevent copy. // CCachePurgerSel(const CCachePurgerSel& rhs); CCachePurgerSel& operator = (const CCachePurgerSel& rhs); }; class CCachePurger { public: CCachePurger(const CCachePurgerSel& desc, LPFNPURGECALLBACK pfnCbk, LPVOID pvCbkData); ~CCachePurger(void); HRESULT Scan(void) { return Process(PURGE_PHASE_SCAN); } HRESULT Delete(void) { return Process(PURGE_PHASE_DELETE); } static void AskUserWhatToPurge(HWND hwndParent, CCachePurgerSel *pDesc); ULONGLONG BytesToScan(void) const { return m_ullBytesToScan; } ULONGLONG BytesScanned(void) const { return m_ullBytesScanned; } ULONGLONG BytesToDelete(void) const { return m_ullBytesToDelete; } ULONGLONG BytesDeleted(void) const { return m_ullBytesDeleted; } ULONGLONG FileBytes(void) const { return m_ullFileBytes; } DWORD Phase(void) const { return m_dwPhase; } DWORD FilesToScan(void) const { return m_cFilesToScan; } DWORD FilesToDelete(void) const { return m_cFilesToDelete; } DWORD FilesScanned(void) const { return m_cFilesScanned; } DWORD FilesDeleted(void) const { return m_cFilesDeleted; } DWORD FileOrdinal(void) const { return m_iFile; } DWORD FileAttributes(void) const { return m_dwFileAttributes; } DWORD FileDeleteResult(void) const { return m_dwResult; } LPCTSTR FileName(void) const { return m_pszFile; } LPVOID CallbackData(void) const { return m_pvCbkData; } BOOL WillDeleteThisFile(void) const { return m_bWillDelete; } private: // // State information to support callback info query functions. // ULONGLONG m_ullBytesToScan; // Total bytes to scan. ULONGLONG m_ullBytesToDelete; // Total bytes to delete. Known after scanning. ULONGLONG m_ullBytesScanned; // Total bytes scanned. ULONGLONG m_ullBytesDeleted; // Total bytes deleted. ULONGLONG m_ullFileBytes; // Size of this file in bytes. DWORD m_dwPhase; // PURGE_PHASE_XXXXXX value. DWORD m_cFilesToScan; // Total files to be scanned. DWORD m_cFilesScanned; // Total files actually scanned. DWORD m_cFilesToDelete; // Total files to delete. Known after scanning. DWORD m_cFilesDeleted; // Total files actually deleted. DWORD m_iFile; // "This" file's number [0..(n-1)]. DWORD m_dwFileAttributes; // This file's Win32 file attributes. DWORD m_dwResult; // Win32 result code from CSCDelete() HANDLE m_hmutexPurgeInProg;// Purge-in-progress mutex. LPCTSTR m_pszFile; // This file's full path. LPVOID m_pvCbkData; // App data provided in DeleteCacheFiles(). BOOL m_bWillDelete; // 1 == File will be deleted in delete phase. DWORD m_dwFlags; // PURGE_FLAG_XXXXX flags. LPFNPURGECALLBACK m_pfnCbk; // Ptr to callback function. const CCachePurgerSel& m_sel; // Ref to selection info. bool m_bIsValid; // Ctor success indicator. bool m_bDelPinned; // Do dwFlags say delete "pinned"? bool m_bDelUnpinned;// Do dwFlags say delete "non-pinned"? bool m_bUserIsAnAdmin; bool m_bIgnoreAccess; HRESULT Process(DWORD dwPhase); bool ProcessDirectory(LPTSTR pszPath, DWORD dwPhase, bool bShareIsOffline); // // Prevent copy. // CCachePurger(const CCachePurger& rhs); CCachePurger& operator = (const CCachePurger& rhs); }; #endif __CSCUI_PURGE_H