Share via


撰寫控制項處理常式函式

當發送器執行緒呼叫 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;
   } 
   
}

服務控制處理函式

完整服務範例