IFunctionDiscoveryNotification::OnEvent 方法 (functiondiscoveryapi.h)

[函数发现可用于“要求”部分中指定的操作系统。 在后续版本中,它可能已更改或不可用。]

在通知期间接收任何添加、删除或更新事件。

语法

HRESULT OnEvent(
  [in] DWORD          dwEventID,
  [in] FDQUERYCONTEXT fdqcQueryContext,
  [in] const WCHAR    *pszProvider
);

参数

[in] dwEventID

事件的类型。

含义
FD_EVENTID_SEARCHCOMPLETE
1000
搜索由提供程序完成。 通常,此通知由网络协议提供程序发送,其中协议指定将接受搜索结果的已定义间隔。 WSD 和 SSDP 提供程序都使用此事件类型。

发送此通知后,查询将忽略对初始搜索或探测请求的所有传入响应。 但是,查询仍会监视 hello 或 Bye 消息, (用于指示何时在) 添加或删除设备。 查询将继续监视这些事件,直到对查询对象调用 Release 为止。

如果发生灾难性错误,则不会发送此通知。

有关特定提供程序如何实现或使用此事件的信息,请参阅 内置 提供程序主题中的提供程序文档链接。

FD_EVENTID_ASYNCTHREADEXIT
1001
函数发现客户端未使用。
FD_EVENTID_SEARCHSTART
1002
函数发现客户端未使用。
FD_EVENTID_IPADDRESSCHANGE
1003
NIC 的 IP 地址已更改。 WSD 提供程序实现此通知。 (发生电源事件时,可能会发送事件,例如,当计算机从睡眠) 唤醒或使用笔记本电脑漫游时。
注意 此值不适用于 Windows Vista。 它适用于 Windows Vista SP1、Windows Server 2008 和操作系统的后续版本。
 

[in] fdqcQueryContext

为更改通知注册的上下文。 类型 FDQUERYCONTEXT 定义为 DWORDLONG。 此参数可以为 NULL。

[in] pszProvider

提供程序的名称。

返回值

客户端程序的 OnEvent 方法实现应将以下 HRESULT 值之一返回给调用方。

返回代码 说明
S_OK
该方法已成功完成。
E_INVALIDARG
其中一个输入参数的值无效。

注解

函数发现提供程序 (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

另请参阅

IFunctionDiscoveryNotification