Программирование для 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 секунд, так как завершается работа операционной системы   




Начало  Назад  Вперед



Книжный магазин