⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 service.h

📁 Programming the Microsoft Windows driver model.2nd 随书光盘。内有很多作者送的实用工具和随书源码。WDM编程
💻 H
字号:
// SERVICE.H -- Interface to CService class

// Copyright (C) 1999 by Walter Oney

// All rights reserved



#ifndef SERVICE_H

#define SERVICE_H



#include <winsvc.h>



/////////////////////////////////////////////////////////////////////////////



class CService

{							// class CService

public:

	CService(DWORD Type, DWORD ControlsAccepted);

	virtual ~CService();



	SERVICE_STATUS_HANDLE	m_hService; // must be public for ServiceMainXx access



	static void __stdcall HandlerThunk(CService* service, DWORD ctlcode);

	static DWORD __stdcall HandlerExThunk(CService* service, DWORD ctlcode, DWORD evtype, PVOID evdata);

	static void __stdcall ServiceMainThunk(CService* service, DWORD argc, TCHAR* argv[]);



protected:

	SERVICE_STATUS			m_status;

	HANDLE					m_hevDone;



	virtual void			Handler(DWORD ctlcode);

	virtual DWORD			HandleDeviceChange(DWORD evtype, _DEV_BROADCAST_HEADER* dbhdr);

	virtual DWORD			HandlePowerEvent(DWORD evtype, DWORD flags);

	virtual DWORD			InitService(DWORD argc, TCHAR* argv[]) = 0;

	virtual void			Run();

	void					ServiceMain(DWORD argc, TCHAR* argv[]);

	virtual void			ShutdownService() = 0;

	void					UpdateStatus();

	void					UpdateStatus(DWORD state, DWORD code = 0);

};							// class CService



#define DEFINE_SERVICE(id, service) \

	void __stdcall Handler##id(DWORD ctlcode) { \

		CService::HandlerThunk(&service, ctlcode);} \

	void __stdcall ServiceMain##id(DWORD argc, TCHAR* argv[]) { \

		service.m_hService = RegisterServiceCtrlHandler(argv[0], Handler##id); \

		CService::ServiceMainThunk(&service, argc, argv);}



#define DEFINE_SERVICE_EX(id, service) \

	void __stdcall HandlerEx##id(DWORD ctlcode, DWORD evtype, PVOID evdata, PVOID context) { \

		CService::HandlerExThunk((CService*) context, ctlcode, evtype, evdata);} \

	void __stdcall ServiceMain##id(DWORD argc, TCHAR* argv[]) { \

		service.m_hService = RegisterServiceCtrlHandlerEx(argv[0], (LPHANDLER_FUNCTION_EX) HandlerEx##id, (PVOID) &service); \

		CService::ServiceMainThunk(&service, argc, argv);}



#define BEGIN_SERVICE_TABLE(tabname) SERVICE_TABLE_ENTRY tabname[] = {

#define DEFINE_SERVICE_TABLE_ENTRY(id, name) {name, ServiceMain##id},

#define END_SERVICE_TABLE() {NULL, NULL}};



#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -