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, 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 [仅限桌面应用] |
标头 |
|
DLL |
|