次の方法で共有


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

ハンドラー 関数がディスパッチャー スレッドによって呼び出されると、Opcode パラメーターで渡されたコントロール コードを処理し、ReportSvcStatus 関数を呼び出してサービスの状態を更新します。 ハンドラー 関数がコントロール コードを受け取ると、コントロール コードを処理してサービスの状態が変更された場合にのみ、サービスの状態を報告する必要があります。 サービスがコントロールに対して動作しない場合は、サービス コントロール マネージャーに状態を報告しないでください。 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;
   } 
   
}

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

完全なサービスサンプル