Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*
**------------------------------------------------------------------------------ ** 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; }
|