Поделиться через


Функция 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 [только классические приложения]
Заголовок
Winsvcp.h
DLL
SecHost.dll

См. также раздел

CreateService

OpenService

OpenSCManager

Отмена подпискиServiceChangeNotifications

QueryServiceDynamicInformation