Функція Handler

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

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

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у наступному ключі реєстру: