windows-nt/Source/XPSP1/NT/shell/applets/cleanup/dataclen/compclen.h
2020-09-26 16:20:57 +08:00

114 lines
3.3 KiB
C++

// NTFS Compression Disk Cleanup cleaner
#ifndef COMPCLEN_H
#define COMPCLEN_H
#include "common.h"
#define COMPCLN_REGPATH TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\VolumeCaches\\Compress old files")
#define MAX_DAYS 500 // Settings dialog spin control max
#define MIN_DAYS 1 // Settings dialog spin control min
#define DEFAULT_DAYS 50 // Default #days if no setting in registry
// Manufactures instances of our CCompCleaner object
class CCompCleanerClassFactory : public IClassFactory
{
private:
ULONG m_cRef; // Reference count
~CCompCleanerClassFactory();
public:
CCompCleanerClassFactory();
// IUnknown
STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// IClassFactory
STDMETHODIMP CreateInstance(IUnknown *, REFIID, void **);
STDMETHODIMP LockServer(BOOL);
};
// the Compression Cleaner Class
class CCompCleaner : public IEmptyVolumeCache2
{
private:
ULONG m_cRef; // reference count
ULARGE_INTEGER cbSpaceUsed;
ULARGE_INTEGER cbSpaceFreed;
FILETIME ftMinLastAccessTime;
TCHAR szVolume[MAX_PATH];
TCHAR szFolder[MAX_PATH];
BOOL bPurged; // TRUE if Purge() method was run
BOOL bSettingsMode; // TRUE if currently in settings mode
CLEANFILESTRUCT *head;
BOOL AddDirToList(LPCTSTR lpPath);
void FreeList(CLEANFILESTRUCT *pCleanFile);
BOOL WalkForUsedSpace(LPCTSTR lpPath, IEmptyVolumeCacheCallBack *picb, BOOL bCompress, int depth);
BOOL CompressFile(IEmptyVolumeCacheCallBack *picb, LPCTSTR lpFile, ULARGE_INTEGER filesize);
void WalkFileSystem(IEmptyVolumeCacheCallBack *picb, BOOL bCompress);
void CalcLADFileTime();
BOOL LastAccessisOK(FILETIME ftFileLastAccess);
~CCompCleaner(void);
public:
CCompCleaner(void);
// IUnknown
STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
//
// IEmptyVolumeCache2 interface members
//
STDMETHODIMP Initialize(
HKEY hRegKey,
LPCWSTR pszVolume,
LPWSTR *ppszDisplayName,
LPWSTR *ppszDescription,
DWORD *pdwFlags
);
STDMETHODIMP GetSpaceUsed(
DWORDLONG *pdwSpaceUsed,
IEmptyVolumeCacheCallBack *picb
);
STDMETHODIMP Purge(
DWORDLONG dwSpaceToFree,
IEmptyVolumeCacheCallBack *picb
);
STDMETHODIMP ShowProperties(
HWND hwnd
);
STDMETHODIMP Deactivate(
DWORD *pdwFlags
);
STDMETHODIMP InitializeEx(
HKEY hRegKey,
LPCWSTR pcwszVolume,
LPCWSTR pcwszKeyName,
LPWSTR *ppwszDisplayName,
LPWSTR *ppwszDescription,
LPWSTR *ppwszBtnText,
DWORD *pdwFlags
);
};
#endif // CCLEAN_H