컨트롤 처리기 함수 작성
처리기 함수가 디스패처 스레드에서 호출되면 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;
}
}
관련 항목