[函数发现可用于“要求”部分中指定的操作系统。 在后续版本中,它可能已更改或不可用。]
在通知期间接收任何添加、删除或更新事件。
语法
HRESULT OnEvent(
[in] DWORD dwEventID,
[in] FDQUERYCONTEXT fdqcQueryContext,
[in] const WCHAR *pszProvider
);
参数
[in] dwEventID
事件的类型。
| 值 | 含义 |
|---|---|
|
搜索由提供程序完成。 通常,此通知由网络协议提供程序发送,其中协议指定将接受搜索结果的已定义间隔。 WSD 和 SSDP 提供程序都使用此事件类型。
发送此通知后,查询将忽略对初始搜索或探测请求的所有传入响应。 但是,查询仍会监视 hello 或 Bye 消息, (用于指示何时在) 添加或删除设备。 查询将继续监视这些事件,直到对查询对象调用 Release 为止。 如果发生灾难性错误,则不会发送此通知。 有关特定提供程序如何实现或使用此事件的信息,请参阅 内置 提供程序主题中的提供程序文档链接。 |
|
函数发现客户端未使用。 |
|
函数发现客户端未使用。 |
|
NIC 的 IP 地址已更改。 WSD 提供程序实现此通知。 (发生电源事件时,可能会发送事件,例如,当计算机从睡眠) 唤醒或使用笔记本电脑漫游时。
注意 此值不适用于 Windows Vista。 它适用于 Windows Vista SP1、Windows Server 2008 和操作系统的后续版本。
|
[in] fdqcQueryContext
为更改通知注册的上下文。 类型 FDQUERYCONTEXT 定义为 DWORDLONG。 此参数可以为 NULL。
[in] pszProvider
提供程序的名称。
返回值
客户端程序的 OnEvent 方法实现应将以下 HRESULT 值之一返回给调用方。
| 返回代码 | 说明 |
|---|---|
|
该方法已成功完成。 |
|
其中一个输入参数的值无效。 |
注解
函数发现提供程序 (SSDP 和 WSD) 使用此方法实现搜索传递已完成的通知。
不要从此方法对查询对象调用 Release 。 这样做可能会导致死锁。 如果在回调正在进行时从另一个线程对查询对象调用 Release ,则在回调完成之前不会释放该对象。
提供程序传递到函数发现的所有通知都会排队,并逐个返回到客户端。 回调是同步的,因此客户端一次只接收一个通知。
由于其他 IFunctionDiscoveryNotification 方法调用可能在其他线程中进行,因此必须在退出方法之前还原调用期间对线程状态所做的任何更改。
示例
以下示例演示 OnEvent 处理程序实现。 CMyNotificationListener 类在 IFunctionDiscoveryNotification 主题中定义。
#include <windows.h>
HRESULT CMyNotificationListener::OnEvent(
IN DWORD dwEventID,
IN FDQUERYCONTEXT fdqcQueryContext,
IN const WCHAR * pszProvider
)
{
HRESULT hr = S_OK;
HANDLE hSearchComplete = INVALID_HANDLE_VALUE;
hSearchComplete = OpenEventW( EVENT_ALL_ACCESS,
FALSE,
L"SearchComplete" );
if( NULL == hSearchComplete )
{
return hr;
}
if( FD_EVENTID_SEARCHCOMPLETE == dwEventID )
{
SetEvent( hSearchComplete );
}
CloseHandle( hSearchComplete );
return hr;
}
要求
| 要求 | 值 |
|---|---|
| 最低受支持的客户端 | Windows Vista [仅限桌面应用] |
| 最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
| 目标平台 | Windows |
| 标头 | functiondiscoveryapi.h |