Bagikan melalui


Menulis Fungsi Handler Kontrol

Ketika fungsi Handler dipanggil oleh utas dispatcher, fungsi ini menangani kode kontrol yang diteruskan dalam parameter Opcode dan kemudian memanggil fungsi ReportSvcStatus untuk memperbarui status layanan. Ketika fungsi Handler menerima kode kontrol, fungsi ini harus melaporkan status layanan hanya jika menangani kode kontrol menyebabkan status layanan berubah. Jika layanan tidak bertindak pada kontrol, layanan tidak boleh melaporkan status ke manajer kontrol layanan. Untuk kode sumber untuk ReportSvcStatus, lihat Menulis Fungsi ServiceMain.

Dalam contoh berikut, fungsi SvcCtrlHandler adalah contoh fungsi Handler . Perhatikan bahwa variabel ghSvcStopEvent adalah variabel global yang harus diinisialisasi dan digunakan seperti yang ditunjukkan dalam Menulis fungsi 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;
   } 
   
}

Fungsi Handler Kontrol Layanan

Sampel Layanan Lengkap