114 lines
3.3 KiB
C++
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
|