共用方式為


撰寫控件處理程式函式

當發送器線程呼叫 Handler 函式時,它會處理傳入 Opcode 參數中的控件程式代碼,然後呼叫 ReportSvcStatus 函式來更新服務狀態。 當 處理程式 函式收到控件程式代碼時,只有當處理控件程式代碼導致服務狀態變更時,它才會報告服務狀態。 如果服務沒有對控件採取行動,它不應該向服務控制管理員報告狀態。 如需 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;
   } 
   
}

服務控制處理程式函式

完整的服務範例