Функція 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: Це значення не підтримується.
Windows NT: Це значення не підтримується.
Windows NT: Це значення не підтримується.
Windows NT: Це значення не підтримується.
Windows NT: Це значення не підтримується.
Для отримання додаткових відомостей див. Примітки.
Цим параметром також може бути визначений користувачем код керування, як описано в таблицінижче.
| Діапазон від 128 до 255. | Служба визначає дію, пов'язану із кодом органу управління. |
Значення, що повертаються
Ця функція не повертає значення.
Коли служба стартує, її функціяServiceMainповинна негайно викликати функціюRegisterServiceCtrlHandler, щоб визначити функціюHandler, яка обробляє запити на керування.
Диспетчер керування в межах головного потоку процесу служби викликає функцію обробки керування для зазначеної служби щоразу, коли він отримує запит на керування від диспетчера керування службами. Після обробки запиту на керування, обробна програма керування повинна викликати функціюSetServiceStatus, щоб повідомити про її поточний стан диспетчеру керування службами.
Коли диспетчер керування службами надсилає керуючий код службі, він чекає на обробника функції, щоб повернути значення перед відправкою додаткових керуючих кодів іншим службам. Якщо обробник функції не повертає значення швидко, диспетчер може заблокувати інші служби, щоб вони не отримали коди керування.
Керуючий кодSERVICE_CONTROL_SHUTDOWNповинен бути оброблений лише службами, які повинні безумовно очищатися під час закриття, тому що є лише обмежений час (близько 20 секунд) доступний для закриття служби. Після того, як цей час спливає, система відновлює процес закриття незалежно від того, чи завершується закриття служби повністю.
| Зверніть увагу!на те, що це, якщо систему залишають у стані закриття (не перезапускають або не вимикають живлення), служба продовжує запускатися. |
Якщо служба потребує більшої кількості часу, щоб очистити пам'ять, вона повинна надіслати повідомлення про станSTOP_PENDING, поряд із вказівкою очікувати, таким чином диспетчер служби знає, як довго чекати перед сповіщенням у системі, що закриття служби завершується повністю . Однак, щоб перешкодити службі зупинити закриття, є межа того, як довго диспетчер служби повинен чекати. Щоб змінити цей термін, модифікуйте значенняWaitToKillServiceTimeoutу наступному ключі реєстру: