다음을 통해 공유


컨트롤 처리기 함수 작성

처리기 함수가 디스패처 스레드에서 호출되면 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;
   } 
   
}

서비스 제어 처리기 함수

전체 서비스 샘플