Функция Handler


Функция Handler - это определяемая программой функция повторного вызова, используемая функцией RegisterServiceCtrlHandler. Сервисная программа использует ее как функцию управления обработчиком  конкретного сервиса. Тип LPHANDLER_FUNCTION определяет указатель на эту функцию. Handler - это имя - заместитель для определяемого программой имени.

Эта функция была заменена управляющей обработчиком функцией HandlerEx, используемой  функцией RegisterServiceCtrlHandlerEx. Сервис может использовать любое управление обработчиком, но новое управление поддерживает определяемые пользователем данные контекста и дополнительные  управляющие коды.

Синтаксис 

VOID WINAPI Handler( 
  DWORD fdwControl 
); 

Параметры

fdwControl
[in] Управляющий код. Этот параметр может быть одним из следующих значений.
Управляющий код Предназначение
SERVICE_CONTROL_CONTINUE Уведомляет, что временно остановленный сервис должен возобновить работу.
SERVICE_CONTROL_INTERROGATE Уведомляет сервис, что он должен сообщить о информацию о его текущем  состоянии  диспетчеру управления сервисами (SCM).
SERVICE_CONTROL_NETBINDADD Уведомляет сетевой сервис, что есть новый компонент для соединения. Сервис должен соединиться с новым компонентом. Однако, этот управляющий код не рекомендуется применять;  вместо него используйте функциональные возможности технологии Plug and Play.

Windows NT: Это значение не поддерживается.

SERVICE_CONTROL_NETBINDDISABLE Уведомляет сетевой сервис, что одна из его связей заблокирована. Сервис должен перечитать свою информацию о связывании и удалить эту связь. Однако, этот управляющий код не рекомендуется применять;  вместо него используйте функциональные возможности технологии Plug and Play.

Windows NT: Это значение не поддерживается.

SERVICE_CONTROL_NETBINDENABLE Уведомляет сетевой сервис, что заблокированное связывание включилось в работу. Сервис должен перечитать свою информацию о связывании и добавить новое связывание. Однако, этот управляющий код не рекомендуется применять;  вместо него используйте функциональные возможности технологии Plug and Play.

Windows NT: Это значение значение не поддерживается.

SERVICE_CONTROL_NETBINDREMOVE Уведомляет сетевой сервис, что компонент для связывания был удален. Сервис должен перечитать свою информацию о связывании и освободиться от удаленного компонента. Однако, этот управляющий код не рекомендуется применять;  вместо него используйте функциональные возможности технологии Plug and Play.

Windows NT: Это значение значение не поддерживается.

SERVICE_CONTROL_PARAMCHANGE Уведомляет сервис, что его параметры запуска изменились. Сервис должен перечитать свои параметры запуска.

Windows NT: Это значение значение не поддерживается.

SERVICE_CONTROL_PAUSE Уведомляет сервис, что он должен сделать паузу в работе.
SERVICE_CONTROL_SHUTDOWN Уведомляет сервис, что система завершает работу, так что сервис, может выполнить задачи очистки.

Дополнительную информацию, см. в разделе Замечания.

SERVICE_CONTROL_STOP Уведомляет сервис о том, что он должен остановиться.

 

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

 

Управляющий код Предназначение
Диапазон от 128 до 255. Служба определяет действие, связанное с кодом органа управления.

Возвращаемые значения

Эта функция не возвращает значение.

Замечания

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

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

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

Управляющий код SERVICE_CONTROL_SHUTDOWN должен быть обработан только  службами, которые должны безусловно очищаться в ходе закрытия, потому что имеется только ограниченное время (около 20 секунд) доступное для закрытия службы. После того, как это время истекает, система возобновляет процесс закрытия независимо от того, завершается ли закрытие службы полностью. 

Обратите внимание! на то, что это, если систему оставляют в состоянии закрытия (не перезапускают или  не выключают питание), служба, продолжает запускаться.

Если служба нуждается в большем количестве времени, чтобы очистить память, она должна отправить сообщения о состоянии STOP_PENDING, наряду с указанием ожидать, таким образом диспетчер службы знает, как долго ждать перед оповещением в системе, что закрытие службы завершается полностью. Однако, чтобы воспрепятствовать службе остановить закрытие, есть предел тому, как долго диспетчер службы должен ждать. Чтобы изменять этот срок, модифицируйте значение WaitToKillServiceTimeout в следующем ключе реестра:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control

Код примера

Пример смотри в статье Запись функции обрабатывающей программы управления.

Смотри также

Обзор Службы, Функции, используемые службамиHandlerEx, RegisterServiceCtrlHandler, ServiceMain, SetServiceStatus

Размещение и совместимость Handler

К

Windows XP

Да 

л

Windows 2000 Professional

Да

и

Windows NT  Workstation

Да

е

Windows Me

Да

н

Windows 98

Да

т

Windows 95

Да

 
С

Windows Server 2003

Да

е Windows 2000 Server Да
р Windows NT Server Да 
в    
е    
р    

Используемая библиотека

-

Используемая DLL -
 Заголовочный файл  

- объявлено в

Winsvc.h

 - включено в

Windows.h

 Unicode

Нет

 Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz