编写控件处理程序函数
当调度程序线程调用 Handler 函数时,它会处理 在 Opcode 参数中传递的控制代码,然后调用 ReportSvcStatus 函数来更新服务状态。 当 Handler 函数收到控制代码时,仅当处理控制代码导致服务状态更改时,它才应报告服务状态。 如果服务不对控件执行操作,则不应向服务控制管理器报告状态。 有关 ReportSvcStatus 的源代码,请参阅 编写 ServiceMain 函数。
在下面的示例中,SvcCtrlHandler 函数是 Handler 函数的一个示例。 请注意,ghSvcStopEvent 变量是一个全局变量,应初始化并使用,如 编写 ServiceMain 函数中所述。
//
// Purpose:
// Called by SCM whenever a control code is sent to the service
// using the ControlService function.
//
// Parameters:
// dwCtrl - control code
//
// Return value:
// None
//
VOID WINAPI SvcCtrlHandler( DWORD dwCtrl )
{
// Handle the requested control code.
switch(dwCtrl)
{
case SERVICE_CONTROL_STOP:
ReportSvcStatus(SERVICE_STOP_PENDING, NO_ERROR, 0);
// Signal the service to stop.
SetEvent(ghSvcStopEvent);
ReportSvcStatus(gSvcStatus.dwCurrentState, NO_ERROR, 0);
return;
case SERVICE_CONTROL_INTERROGATE:
break;
default:
break;
}
}
相关主题