Delen via


Een besturingshandlerfunctie schrijven

Wanneer een Handler-functie wordt aangeroepen door de dispatcher-thread, verwerkt deze de controlecode die is doorgegeven aan de parameter Opcode en roept vervolgens de functie ReportSvcStatus aan om de servicestatus bij te werken. Wanneer een handler functie een besturingscode ontvangt, moet de servicestatus alleen worden gerapporteerd als het verwerken van de besturingscode ervoor zorgt dat de servicestatus wordt gewijzigd. Als de service niet op de controle reageert, moet de status niet worden gerapporteerd aan de servicebeheerder. Zie Een ServiceMain-functie schrijvenvoor de broncode voor ReportSvcStatus.

In het volgende voorbeeld is de functie SvcCtrlHandler een voorbeeld van een Handler functie. Houd er rekening mee dat de variabele ghSvcStopEvent een globale variabele is die moet worden geïnitialiseerd en gebruikt zoals wordt weergegeven in Het schrijven van een ServiceMain-functie.

//
// 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;
   } 
   
}

Servicecontrolehandlerfunctie

het volledige servicevoorbeeld