Schreiben einer Steuerelementhandlerfunktion

Wenn eine Handlerfunktion vom Verteilerthread aufgerufen wird, verarbeitet sie den im Opcode-Parameter übergebenen Steuerungscode und ruft dann die ReportSvcStatus-Funktion auf, um den Dienststatus zu aktualisieren. Wenn eine Handler-Funktion einen Steuerelementcode empfängt, sollte sie den Dienststatus nur melden, wenn die Verarbeitung des Steuerelementcodes dazu führt, dass sich der Dienststatus ändert. Wenn der Dienst nicht auf das Steuerelement reagiert, sollte er den Status nicht an den Dienststeuerungs-Manager melden. Den Quellcode für ReportSvcStatus finden Sie unter Schreiben einer ServiceMain-Funktion.

Im folgenden Beispiel ist die SvcCtrlHandler-Funktion ein Beispiel für eine Handlerfunktion. Beachten Sie, dass die GhSvcStopEvent-Variable eine globale Variable ist, die initialisiert und verwendet werden sollte, wie unter Schreiben einer ServiceMain-Funktionveranschaulicht.

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

Dienststeuerungshandler-Funktion

Beispiel für den vollständigen Dienst