次の方法で共有


コントロール ハンドラー関数の記述

ハンドラー関数は、ディスパッチャー スレッドによって呼び出されると、Opcode パラメーターで渡されたコントロール コードを処理し、ReportSvcStatus 関数を呼び出してサービスの状態を更新します。 Handler 関数は、コントロール コードを受け取ると、コントロール コードの処理によってサービスの状態が変更された場合にのみ、サービスの状態を報告する必要があります。 サービスがコントロールに対して機能しない場合は、サービス コントロール マネージャーに状態を報告しないでください。 ReportSvcStatus のソース コードについては、「 ServiceMain 関数の記述」を参照してください。

次の例では、SvcCtrlHandler 関数が Handler 関数の例です。 ghSvcStopEvent 変数は、 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;
   } 
   
}

サービス コントロール ハンドラー関数

サービスの完全なサンプル