Scrittura di una funzione del gestore di controlli

Quando una funzione Handler viene chiamata dal thread dispatcher, gestisce il codice di controllo passato nel parametro Opcode e quindi chiama la funzione ReportSvcStatus per aggiornare lo stato del servizio. Quando una funzione gestore riceve un codice di controllo, deve segnalare lo stato del servizio solo se la gestione del codice di controllo causa la modifica dello stato del servizio. Se il servizio non agisce sul controllo, non deve segnalare lo stato al gestore di controllo del servizio. Per il codice sorgente per ReportSvcStatus, vedere Scrittura di una funzione ServiceMain.

Nell'esempio seguente la funzione SvcCtrlHandler è un esempio di funzione Handler . Si noti che la variabile ghSvcStopEvent è una variabile globale che deve essere inizializzata e usata come illustrato in Scrittura di una funzione 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;
   } 
   
}

Funzione Handler di controllo dei servizi

Esempio di servizio completo