256 lines
6.2 KiB
C++
256 lines
6.2 KiB
C++
|
/*
|
||
|
**------------------------------------------------------------------------------
|
||
|
** Module: Disk Cleanup Applet
|
||
|
** File: callback.cpp
|
||
|
**
|
||
|
** Purpose: Defines the IEmptyVoluemCacheCallback interface for
|
||
|
** the cleanup manager.
|
||
|
** Notes:
|
||
|
** Mod Log: Created by Jason Cobb (2/97)
|
||
|
**
|
||
|
** Copyright (c)1997 Microsoft Corporation, All Rights Reserved
|
||
|
**------------------------------------------------------------------------------
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
**------------------------------------------------------------------------------
|
||
|
** Project include files
|
||
|
**------------------------------------------------------------------------------
|
||
|
*/
|
||
|
#include "common.h"
|
||
|
#include "callback.h"
|
||
|
#include "dmgrinfo.h"
|
||
|
#include "dmgrdlg.h"
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
**------------------------------------------------------------------------------
|
||
|
** Local variables
|
||
|
**------------------------------------------------------------------------------
|
||
|
*/
|
||
|
static PCLIENTINFO g_pClientInfo; // Set to the current CLIENTINFO struct
|
||
|
|
||
|
static CleanupMgrInfo *g_pcmi;
|
||
|
|
||
|
|
||
|
CVolumeCacheCallBack::CVolumeCacheCallBack(
|
||
|
void
|
||
|
)
|
||
|
{
|
||
|
g_pClientInfo = NULL;
|
||
|
g_pcmi = NULL;
|
||
|
}
|
||
|
|
||
|
CVolumeCacheCallBack::~CVolumeCacheCallBack(
|
||
|
void
|
||
|
)
|
||
|
{
|
||
|
;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
**------------------------------------------------------------------------------
|
||
|
** CVolumeCacheCallBack::QueryInterface
|
||
|
**
|
||
|
** Purpose: Part of the IUnknown interface
|
||
|
** Parameters:
|
||
|
** riid - interface ID to query on
|
||
|
** ppv - pointer to interface if we support it
|
||
|
** Return: NOERROR on success, E_NOINTERFACE otherwise
|
||
|
** Notes;
|
||
|
** Mod Log: Created by Jason Cobb (2/97)
|
||
|
**------------------------------------------------------------------------------
|
||
|
*/
|
||
|
STDMETHODIMP CVolumeCacheCallBack::QueryInterface(
|
||
|
REFIID riid,
|
||
|
LPVOID FAR *ppv
|
||
|
)
|
||
|
{
|
||
|
*ppv = NULL;
|
||
|
|
||
|
//
|
||
|
//Check for IUnknown interface request
|
||
|
//
|
||
|
if (IsEqualIID (riid, IID_IUnknown))
|
||
|
{
|
||
|
//
|
||
|
//Typecast to the requested interface so C++ sets up
|
||
|
//the virtual tables correctly
|
||
|
//
|
||
|
*ppv = (LPUNKNOWN)(LPEMPTYVOLUMECACHECALLBACK) this;
|
||
|
AddRef();
|
||
|
return NOERROR;
|
||
|
}
|
||
|
|
||
|
|
||
|
//
|
||
|
//Check for IEmptyVolumeCacheCallBack interface request
|
||
|
//
|
||
|
if (IsEqualIID (riid, IID_IEmptyVolumeCacheCallBack))
|
||
|
{
|
||
|
//
|
||
|
//Typecast to the requested interface so C++ sets up
|
||
|
//the virtual tables correctly
|
||
|
//
|
||
|
*ppv = (LPEMPTYVOLUMECACHECALLBACK) this;
|
||
|
AddRef();
|
||
|
return NOERROR;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
//Error - unsupported interface requested
|
||
|
//
|
||
|
return E_NOINTERFACE;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
**------------------------------------------------------------------------------
|
||
|
** CVolumeCacheCallBack::AddRef
|
||
|
**
|
||
|
** Purpose: ups the reference count to this object
|
||
|
** Notes;
|
||
|
** Return: current refernce count
|
||
|
** Mod Log: Created by Jason Cobb (2/97)
|
||
|
**------------------------------------------------------------------------------
|
||
|
*/
|
||
|
STDMETHODIMP_(ULONG) CVolumeCacheCallBack::AddRef()
|
||
|
{
|
||
|
return ++m_cRef;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
**------------------------------------------------------------------------------
|
||
|
** CVolumeCacheCallBack::Release
|
||
|
**
|
||
|
** Purpose: downs the reference count to this object
|
||
|
** and deletes the object if no one is using it
|
||
|
** Notes;
|
||
|
** Mod Log: Created by Jason Cobb (2/97)
|
||
|
**------------------------------------------------------------------------------
|
||
|
*/
|
||
|
STDMETHODIMP_(ULONG) CVolumeCacheCallBack::Release()
|
||
|
{
|
||
|
//
|
||
|
//Decrement and check
|
||
|
//
|
||
|
if (--m_cRef)
|
||
|
return m_cRef;
|
||
|
|
||
|
//
|
||
|
//No references left to this object
|
||
|
//
|
||
|
delete this;
|
||
|
|
||
|
return 0L;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
**------------------------------------------------------------------------------
|
||
|
** CVolumeCacheCallBack::ScanProgress
|
||
|
**
|
||
|
** Purpose: Part of the IUnknown interface
|
||
|
** Parameters:
|
||
|
** dwSpaceUsed - Amount of space that the client can free so far
|
||
|
** dwFlags - IEmptyVolumeCache flags
|
||
|
** pszStatus - Display string to tell the user what is happening
|
||
|
** Return: If E_ABORT then this indicates that no more notifications
|
||
|
** are required and the client should abort the scan. S_OK
|
||
|
** if the client should continue scanning.
|
||
|
** Notes;
|
||
|
** Mod Log: Created by Jason Cobb (2/97)
|
||
|
**------------------------------------------------------------------------------
|
||
|
*/
|
||
|
STDMETHODIMP
|
||
|
CVolumeCacheCallBack::ScanProgress(
|
||
|
DWORDLONG dwSpaceUsed,
|
||
|
DWORD dwFlags,
|
||
|
LPCWSTR pszStatus
|
||
|
)
|
||
|
{
|
||
|
//
|
||
|
//Update the amount of used disk space for this client
|
||
|
//
|
||
|
if (g_pClientInfo)
|
||
|
g_pClientInfo->dwUsedSpace.QuadPart = dwSpaceUsed;
|
||
|
|
||
|
//
|
||
|
//Check the Flags. If this is the last notification from this client
|
||
|
//then set g_pClientInfo to NULL
|
||
|
//
|
||
|
if (dwFlags & EVCCBF_LASTNOTIFICATION)
|
||
|
g_pClientInfo = NULL;
|
||
|
|
||
|
//
|
||
|
//Has the user aborted the scan? If so let the cleanup object know
|
||
|
//so that it can stop scanning
|
||
|
//
|
||
|
if (g_pcmi->bAbortScan)
|
||
|
return E_ABORT;
|
||
|
|
||
|
else
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
**------------------------------------------------------------------------------
|
||
|
** CVolumeCacheCallBack::PurgeProgress
|
||
|
**
|
||
|
** Purpose: Part of the IUnknown interface
|
||
|
** Parameters:
|
||
|
** dwSpaceFreed - Amount of disk space freed so far.
|
||
|
** dwSpaceToFree - Amount the client was expected to free.
|
||
|
** dwFlags - IEmptyVolumeCache flags
|
||
|
** pszStatus - Display string to tell the user what is happening
|
||
|
** Return: If E_ABORT then this indicates that no more notifications
|
||
|
** are required and the client should abort the scan. S_OK
|
||
|
** if the client should continue scanning.
|
||
|
** Notes;
|
||
|
** Mod Log: Created by Jason Cobb (2/97)
|
||
|
**------------------------------------------------------------------------------
|
||
|
*/
|
||
|
STDMETHODIMP
|
||
|
CVolumeCacheCallBack::PurgeProgress(
|
||
|
DWORDLONG dwSpaceFreed,
|
||
|
DWORDLONG dwSpaceToFree,
|
||
|
DWORD dwFlags,
|
||
|
LPCWSTR pszStatus
|
||
|
)
|
||
|
{
|
||
|
g_pcmi->cbCurrentClientPurgedSoFar.QuadPart = dwSpaceFreed;
|
||
|
|
||
|
//
|
||
|
//Update the progress bar
|
||
|
//
|
||
|
PostMessage(g_pcmi->hAbortPurgeWnd, WMAPP_UPDATEPROGRESS, 0, 0);
|
||
|
|
||
|
|
||
|
//
|
||
|
//Has the user aborted the purge? If so let the cleanup object know
|
||
|
//so that it can stop purging
|
||
|
//
|
||
|
if (g_pcmi->bAbortPurge)
|
||
|
return E_ABORT;
|
||
|
|
||
|
else
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
CVolumeCacheCallBack::SetCleanupMgrInfo(
|
||
|
PVOID pVoid
|
||
|
)
|
||
|
{
|
||
|
if (pVoid)
|
||
|
g_pcmi = (CleanupMgrInfo*)pVoid;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
CVolumeCacheCallBack::SetCurrentClient(
|
||
|
PVOID pVoid
|
||
|
)
|
||
|
{
|
||
|
if (pVoid)
|
||
|
g_pClientInfo = (PCLIENTINFO)pVoid;
|
||
|
}
|