Aracılığıyla paylaş


Denetim İşleyicisi İşlevi Yazma

İşleyicisi işlevi, dağıtıcı iş parçacığı tarafından çağrıldığında, Opcode parametresinde iletilen denetim kodunu işler ve ardından hizmet durumunu güncellemek için ReportSvcStatus işlevini çağırır. bir İşleyicisi işlevi bir denetim kodu aldığında, yalnızca denetim kodunun işlenmesi hizmet durumunun değişmesine neden oluyorsa hizmet durumunu bildirmelidir. Hizmet kontrolü sağlamazsa, hizmet denetim yöneticisine durum bildirmemelidir. ReportSvcStatus kaynak kodu için bkz. ServiceMain İşlevi Yazma.

Aşağıdaki örnekte, SvcCtrlHandler işlevi bir İşleyicisi işlevi örneğidir. ghSvcStopEvent değişkeninin, ServiceMain işlevi yazmabölümünde gösterildiği gibi başlatılması ve kullanılması gereken genel bir değişken olduğunu unutmayın.

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

Hizmet Denetimi İşleyici İşlevi

Tam Hizmet Örneği