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) 监视更改。

服务的句柄由 OpenServiceCreateService 函数返回,并且必须具有 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, optional]

表示此通知回调的上下文的指针。

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 值时,应用程序必须验证更改的内容。

回调函数不得阻止执行。 如果预期回调函数的执行需要一段时间,请将工作项排队到线程池中的线程,将回调函数中执行的工作卸载到单独的线程。 使回调函数需要时间的某些类型的工作包括执行文件 I/O、等待事件和进行外部远程过程调用。

要求

要求
最低受支持的客户端
Windows 8 [仅限桌面应用]
最低受支持的服务器
Windows Server 2012 [仅限桌面应用]
标头
Winsvcp.h
DLL
SecHost.dll

另请参阅

CreateService

OpenService

OpenSCManager

UnsubscribeServiceChangeNotifications

QueryServiceDynamicInformation