Bagikan melalui


Menulis Fungsi Pengendali Kontrol

Ketika fungsiHandlerdipanggil 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 tersebut harus melaporkan status layanan hanya jika penanganan kode kontrol tersebut menyebabkan status layanan berubah. Jika layanan tidak bertindak terhadap kontrol, layanan tidak boleh melaporkan statusnya kepada 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 sebagaimana 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