다음을 통해 공유


컨트롤 처리기 함수 작성

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

서비스 제어 핸들러 함수 기능

전체 서비스 샘플