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



         

Состояние сервиса


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

BOOL SetServiceStatus(

  SERVICE_STATUS_HANDLE sshServiceStatus, // идентификатор

                                          // состояния сервиса

  LPSERVICE_STATUS lpssServiceStatus);    // адрес структуры,

                               // содержащей состояние сервиса

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

В параметре lpssServiceStatus вы должны передать адрес предварительно заполненной структуры типа SERVICE_STATUS:

typedef struct _SERVICE_STATUS 

{

  DWORD dwServiceType;       // тип сервиса

  DWORD dwCurrentState;      // текущее состояние сервиса

  DWORD dwControlsAccepted;  // обрабатываемые команды

  DWORD dwWin32ExitCode;     // код ошибки при запуске

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

  DWORD dwServiceSpecificExitCode; // специфический код ошибки

  DWORD dwCheckPoint;        // контрольная точка при

                             // выполнении длительных операций

  DWORD dwWaitHint;          // время ожидания

} SERVICE_STATUS, *LPSERVICE_STATUS;

В поле dwServiceType необходимо записать один из перечисленных ниже флагов, определяющих тип сервиса:

Флаг

Описание

SERVICE_WIN32_OWN_PROCESS

Сервис работает как отдельный процесс

SERVICE_WIN32_SHARE_PROCESS

Сервис работает вместе с другими сервисами в рамках одного и того же процесса

SERVICE_KERNEL_DRIVER

Сервис представляет собой драйвер операционной системы Microsoft Windows NT

SERVICE_FILE_SYSTEM_DRIVER

Сервис является драйвером файловой системы

SERVICE_INTERACTIVE_PROCESS 

Сервисный процесс может взаимодействовать с программным интерфейсом рабочего стола Desktop

В поле dwCurrentState вы должны записать текущее состояние сервиса. Здесь можно использовать одну из перечисленных ниже констант:

Константа

Состояние сервиса

SERVICE_STOPPED

Сервис остановлен

SERVICE_START_PENDING

Сервис находится в состоянии запуска, но еще не работает

SERVICE_STOP_PENDING

Сервис находится в состоянии остановки, но еще не остановился

SERVICE_RUNNING

Сервис работает

SERVICE_CONTINUE_PENDING

Сервис начинает запускаться после временной остановки, но еще не работает

SERVICE_PAUSE_PENDING

Сервис начинает переход в состояние временной остановки, но еще не остановился

SERVICE_PAUSED

Сервис находится в состоянии верменной остановки

<


Содержание  Назад  Вперед