Программирование для Windows NT (том 2)

Функция обработки команд


Как следует из названия, функция обработки команд, зарегистрированная функцией RegisterServiceCtrlHandler, обрабатывает команды, передаваемые сервису операционной системой, другими сервисами или приложениями. Эта функция может иметь любое имя и выглядит следующим образом:

void WINAPI ServiceControl(DWORD dwControlCode)

{

  switch(dwControlCode)

  {

    case SERVICE_CONTROL_STOP:

    {

      ss.dwCurrentState = SERVICE_STOP_PENDING;

      ReportStatus(ss.dwCurrentState, NOERROR, 0);

      // Выполняем остановку сервиса, вызывая функцию,

      // которая выполняет все необходимые для этого действия

      // ServiceStop();

      ReportStatus(SERVICE_STOPPED, NOERROR, 0);



      break;

    }

    case SERVICE_CONTROL_INTERROGATE:

    {

      ReportStatus(ss.dwCurrentState, NOERROR, 0);

      break;

    }

    default:

    {

      ReportStatus(ss.dwCurrentState, NOERROR, 0);

      break;

    }

  }

}

В приведенном выше фрагменте кода для сообщения процессу управления сервисами текущего состояния сервиса мы вызываем созданную нами функцию ReportStatus. Эта функция будет описана в следующем разделе.

Через единственный параметр функция обработки команд получает код команды, который может принимать одно из перечисленных ниже значений.

Значение

Описание

SERVICE_CONTROL_STOP

Остановка сервиса

SERVICE_CONTROL_PAUSE

Временная остановка сервиса

SERVICE_CONTROL_CONTINUE

Продолжение работы сервиса после временной остановки

SERVICE_CONTROL_INTERROGATE

Когда поступает эта команда, сервис должен немедленно сообщить процессу управления сервисами свое состояние

SERVICE_CONTROL_SHUTDOWN

Сервис должен прекратить работу в течении 20 секунд, так как завершается работа операционной системы   



Содержание раздела