四、自定义服务控制码
除了系统定义的五种控制码外(还有一种是:SERVICE_CONTROL_SHUTDOWN),用户还可自定义控制码,其取值范围是128-255。用户可以通过控制面板中的服务
项向特定服务程序的控制处理函数发送控制码,程序员可以调用系统函数
ControlService 直接向服务程序的控制处理函数发送控制码。其函数原型如下:
BOOL ControlService(
SC_HANDLE hService,
DWORD dwControl,
LPSERVICE_STATUS lpServiceStatus
);
hService :函数 OpenService or CreateService 返回的服务程序句柄。
dwControl :控制码,不能是SERVICE_CONTROL_SHUTDOWN。
lpServiceStatus:返回最后收到的服务状态信息。
1. 定义控制码,其取值范围是128-255
Eg:
#define PLAY_MUSIC_START 0x00000086
#define PLAY_MUSIC_STOP 0x00000087
2. 在服务控制处理函数中添加处理分支
VOID WINAPI ServiceHandler(DWORD opcode)
{
switch (opcode)
{
case SERVICE_CONTROL_STOP:
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
if(!SetServiceStatus(ServiceStatusHandle,&ServiceStatus))
{
WriteToLog(" SetServiceStatus failure");
}
WriteToLog("stop success !");
return ;
case SERVICE_CONTROL_SHUTDOWN:
ServiceStatus.dwCurrentState = SERVICE_CONTROL_SHUTDOWN;
if(!SetServiceStatus(ServiceStatusHandle,&ServiceStatus))