Написание функции обработчика элемента управления
Когда функция Handler вызывается потоком диспетчера, она обрабатывает управляющий код, переданный в параметр Opcode , а затем вызывает функцию ReportSvcStatus для обновления состояния службы. Когда функция Handler получает код элемента управления, она должна сообщать о состоянии службы, только если обработка кода элемента управления приводит к изменению состояния службы. Если служба не работает с элементом управления, она не должна сообщать о состоянии диспетчеру элементов управления службой. Исходный код для 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;
}
}
Связанные темы