Функция SubscribeServiceChangeNotifications
Подписывается на уведомления об изменении состояния службы с помощью функции обратного вызова.
Синтаксис
DWORD WINAPI SubscribeServiceChangeNotifications(
_In_ SC_HANDLE hService,
_In_ SC_EVENT_TYPE eEventType,
_In_ PSC_NOTIFICATION_CALLBACK pCallback,
_In_opt_ PVOID pCallbackContext,
_Out_ PSC_NOTIFICATION_REGISTRATION *pSubscription
);
Параметры
-
hService [in]
-
Дескриптор службы или дескриптор диспетчера управления службами (SCM) для отслеживания изменений.
Дескриптора служб возвращаются функцией OpenService и CreateService и должны иметь право доступа к SERVICE_QUERY_STATUS . Дескрипторы диспетчеру управления службами возвращаются функцией OpenSCManager и должны иметь право доступа SC_MANAGER_ENUMERATE_SERVICE .
-
eEventType [in]
-
Указывает тип изменений состояния, о котором следует сообщать. Этому параметру присваивается одно из значений, указанных в SC_EVENT_TYPE. Поведение этой функции отличается в зависимости от типа события следующим образом.
Значение Значение - SC_EVENT_DATABASE_CHANGE
- 0
Служба добавлена или удалена. Параметр hService должен быть дескриптором для SCM. - SC_EVENT_PROPERTY_CHANGE
- 1
Обновлено одно или несколько свойств службы. Параметр hService должен быть дескриптором службы. - SC_EVENT_STATUS_CHANGE
- 2
Состояние службы изменилось. Параметр hService должен быть дескриптором службы. -
pCallback [in]
-
Указывает функцию обратного вызова. Обратный вызов должен быть определен как имеющий тип SC_NOTIFICATION_CALLBACK. Дополнительные сведения см. в подразделе "Примечания".
-
pCallbackContext [in, необязательный]
-
Указатель, представляющий контекст для этого обратного вызова уведомления.
-
pSubscription [out]
-
Возвращает указатель на подписку, полученную в результате регистрации обратного вызова уведомления. Вызывающий объект отвечает за вызов UnsubscribeServiceChangeNotifications , чтобы прекратить получение уведомлений.
Возвращаемое значение
Если функция выполнена успешно, возвращаемое значение будет ERROR_SUCCESS.
Если функция завершается сбоем, возвращаемое значение является одним из кодов системных ошибок.
Комментарии
Функция обратного вызова объявляется следующим образом:
typedef VOID CALLBACK SC_NOTIFICATION_CALLBACK(
_In_ DWORD dwNotify,
_In_ PVOID pCallbackContext
);
typedef SC_NOTIFICATION_CALLBACK* PSC_NOTIFICATION_CALLBACK;
Функция обратного вызова получает указатель на контекст, предоставленный вызывающим объектом. Обратный вызов вызывается в результате события изменения состояния службы. При вызове обратного вызова ему предоставляется битовая маска значений SERVICE_NOTIFY_XXX , указывающих тип изменения состояния службы. Если обратный вызов предоставляется с нулем вместо допустимого значения SERVICE_NOTIFY_XXX , приложение должно проверить, что было изменено.
Функция обратного вызова не должна блокировать выполнение. Если выполнение функции обратного вызова займет много времени, разгрузите работу, выполняемую в функции обратного вызова, в отдельный поток, установив рабочий элемент в очередь в поток в пуле потоков. Некоторые типы работы, которые могут занять время функции обратного вызова, включают выполнение операций ввода-вывода файлов, ожидание события и выполнение внешних удаленных вызовов процедур.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента |
Windows 8 [только классические приложения] |
Минимальная версия сервера |
Windows Server 2012 [только классические приложения] |
Заголовок |
|
DLL |
|