编写控件处理程序函数

当调度程序线程调用 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;
   } 
   
}

服务控制处理程序函数

完整服务示例