windows-nt/Source/XPSP1/NT/admin/pchealth/sr/service/evthandler.h
2020-09-26 16:20:57 +08:00

147 lines
4.3 KiB
C++

/******************************************************************************
*
* Copyright (c) 2000 Microsoft Corporation
*
* Module Name:
* evthandler.h
*
* Abstract:
* CEventHandler class definition
*
* Revision History:
* Brijesh Krishnaswami (brijeshk) 03/17/2000
* created
*
*****************************************************************************/
#ifndef _EVTHANDLER_H_
#define _EVTHANDLER_H_
#include "srrestoreptapi.h"
#include "counter.h"
typedef DWORD (WINAPI* WORKITEMFUNC)(PVOID);
// shell notifications
DWORD WINAPI OnDiskFree_200(PVOID pszDrive);
DWORD WINAPI OnDiskFree_80(PVOID pszDrive);
DWORD WINAPI OnDiskFree_50(PVOID pszDrive);
DWORD WINAPI PostFilterIo(PVOID pNum);
extern "C" void CALLBACK TimerCallback(PVOID, BOOLEAN);
extern "C" void CALLBACK IoCompletionCallback(DWORD dwErrorCode,
DWORD dwBytesTrns,
LPOVERLAPPED pOverlapped);
extern "C" void CALLBACK IdleRequestCallback(PVOID pContext, BOOLEAN fTimerFired);
extern "C" void CALLBACK IdleStartCallback(PVOID pContext, BOOLEAN fTimerFired);
extern "C" void CALLBACK IdleStopCallback(PVOID pContext, BOOLEAN fTimerFired);
#define MAX_IOCTLS 5
typedef struct _SR_OVERLAPPED
{
OVERLAPPED m_overlapped;
HANDLE m_hDriver;
DWORD m_dwRecordLength;
PSR_NOTIFICATION_RECORD m_pRecord;
} SR_OVERLAPPED, *LPSR_OVERLAPPED;
class CEventHandler {
public:
CEventHandler();
~CEventHandler();
// rpc functions
DWORD DisableSRS(LPWSTR szDrive);
DWORD EnableSRS(LPWSTR szDrive);
DWORD DisableFIFOS(DWORD);
DWORD EnableFIFOS();
DWORD SRUpdateMonitoredListS(LPWSTR);
DWORD SRUpdateDSSizeS(LPWSTR pszDrive, UINT64 ullSizeLimit);
DWORD SRSwitchLogS();
BOOL SRSetRestorePointS(PRESTOREPOINTINFOW, PSTATEMGRSTATUS);
DWORD SRRemoveRestorePointS(DWORD);
DWORD SRPrintStateS();
// actions on the datastore
DWORD OnReset(LPWSTR pszDrive); // filter initiated or DisableSRS/EnableSRS initiated
DWORD OnFreeze(LPWSTR pszDrive); // filter initiated or OnLowDisk initiated
DWORD OnThaw(LPWSTR pszDrive); // OnTimer initiated
DWORD OnCompress(LPWSTR pszDrive); // OnIdle initiated
DWORD OnFifo(LPWSTR pszDrive, DWORD dwTargetRp, int nPercent, BOOL fIncludeCurrentRp, BOOL fFifoAtleastOneRp);
// filter initiated or timer initiated
DWORD OnBoot(); // initialize all activity
DWORD OnFirstRun();
DWORD OnTimer(LPVOID, BOOL); // timer callback
DWORD OnIdle();
void OnStop(); // stop all activity
// filter notifications
void OnAny_Notification(DWORD dwErrorCode,
DWORD dwBytesTrns,
LPOVERLAPPED pOverlapped);
void OnFirstWrite_Notification(LPWSTR pszDrive);
void OnVolumeError_Notification(LPWSTR pszDrive, ULONG ulError);
void OnSize_Notification(LPWSTR pszDrive, ULONG ulSize);
DWORD WaitForStop( );
void SignalStop( );
DWORD XmlToBlob(LPWSTR);
DWORD QueueWorkItem(WORKITEMFUNC pFunc, PVOID pv);
void RefreshCurrentRp(BOOL fScanAllDrives);
CCounter* GetCounter() {
return &m_Counter;
}
CLock* GetLock() {
return &m_DSLock;
}
CRestorePoint m_CurRp;
HANDLE m_hIdleStartHandle;
HANDLE m_hIdleRequestHandle;
HANDLE m_hIdleStopHandle;
private:
CLock m_DSLock;
HANDLE m_hTimerQueue;
HANDLE m_hTimer;
HINSTANCE m_hIdle;
CCounter m_Counter;
BOOL m_fNoRpOnSystem;
FILETIME m_ftFreeze;
BOOL m_fIdleSrvStarted;
int m_nNestedCallCount;
HMODULE m_hCOMDll;
BOOL m_fCreateRpASAP;
DWORD InitIdleDetection();
BOOL EndIdleDetection();
DWORD InitTimer();
BOOL EndTimer();
BOOL IsMachineIdle();
BOOL IsTimeForAutoRp();
DWORD WriteRestorePointLog(LPWSTR pszFullPath,
PRESTOREPOINTINFOW pRPInfo);
};
extern CEventHandler *g_pEventHandler;
#endif