Share via


컨트롤 처리기 함수 작성

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

서비스 제어 처리기 함수

전체 서비스 샘플