Schreiben einer Steuerelementhandlerfunktion

Wenn eine Handlerfunktion vom Dispatcherthread aufgerufen wird, verarbeitet sie den im Opcode-Parameter übergebenen Steuercode und ruft dann die ReportSvcStatus-Funktion auf, um den Dienst status zu aktualisieren. Wenn eine Handlerfunktion einen Steuerungscode empfängt, sollte sie den Dienst nur status melden, wenn die Behandlung des Steuerungscodes dazu führt, dass sich der Dienst status ändert. Wenn der Dienst nicht auf das Steuerelement reagiert, sollte er dem Dienststeuerungs-Manager keine status 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 Variable ghSvcStopEvent eine globale Variable ist, die initialisiert und verwendet werden sollte, wie unter Schreiben einer ServiceMain-Funktion veranschaulicht.

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