IFunctionInstanceQuery::Execute 方法 (functiondiscoveryapi.h)

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

执行 IFunctionDiscovery::CreateInstanceQuery 定义的查询。

语法

HRESULT Execute(
  [out] IFunctionInstance **ppIFunctionInstance
);

参数

[out] ppIFunctionInstance

指向接收请求的函数实例的 IFunctionInstance 接口指针的指针。

返回值

可能的返回值包括但不限于以下值。

返回代码/值 说明
S_OK
该方法已成功完成。
E_INVALIDARG
ppIFunctionInstance 参数为 NULL
E_OUTOFMEMORY
方法无法分配执行此操作所需的内存。
E_PENDING
提供程序返回的结果将通过异步通知提供。
HRESULT_FROM_WIN32 (ERROR_OBJECT_NOT_FOUND)
0x800710d8
此计算机上不存在由指定 ID 表示的函数实例。
HRESULT_FROM_WIN32 (ERROR_KEY_DELETED)
0x800703fa
无法返回函数实例,因为与函数实例对应的键已被另一个进程删除。 如果在进行查询处理时删除了某个键,则注册表提供程序将返回此错误。
HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)
0x80070002
无法返回函数实例,因为找不到与函数实例对应的键。 当提供程序找不到实例查询的匹配实例时,注册表提供程序将返回此错误。
 

预定义查询是分层 类别的查询。 执行预定义查询时,返回函数实例的每个提供程序也会返回 HRESULT 值。 提供程序 HRESULT 值是聚合的, Execute 方法返回的值反映了这些聚合结果。 结果聚合如下:

  • 如果所有提供程序都返回S_OK, 则 Execute 返回S_OK。
  • 如果至少有一个提供程序返回E_PENDING,而所有其他提供程序返回S_OK或E_PENDING, 则 Execute 返回E_PENDING。
  • 如果所有提供程序都返回错误值 (即S_OK或E_PENDING) 以外的值, 则 Execute 将返回上次查询的网络提供程序返回的错误值。 此外,如果向 IFunctionDiscovery::CreateInstanceCollectionQuery 提供了客户端的 IFunctionDiscoveryNotification 回调例程,则会为每个提供程序发送 OnError 通知。 每个 OnError 通知都包含提供程序返回的 HRESULT。
  • 如果至少有一个提供程序返回错误值,而所有其他提供程序返回S_OK, 则 Execute 将返回S_OK。 如上文所述发送 OnError 通知 () 。
  • 如果至少有一个提供程序返回错误值,并且至少有一个提供程序返回E_PENDING, 则 Execute 将返回E_PENDING。 如上文所述发送 OnError 通知 () 。

注解

客户端程序必须调用此方法才能从查询对象中检索数据。 调用此方法时,将执行以下操作:

  1. 检索函数实例。
  2. 如果将客户端程序的 IFunctionDiscoveryNotification 回调例程的地址提供给 IFunctionDiscovery::CreateInstanceQuery,则启动更新通知机制。
函数发现网络提供程序仅通过 IFunctionDiscoveryNotification 接口返回函数实例。 调用此方法时,它们不直接返回函数实例。 相反, Execute 只是启动完全异步的检索操作,并返回E_PENDING指示将以异步方式返回结果。 必须使用通知从函数发现网络提供程序检索函数实例。

如果对同一查询对象调用了 两次 Execute ,则第一个查询在执行第二个查询之前终止。

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 functiondiscoveryapi.h
DLL FunDisc.dll

另请参阅

函数发现查询

IFunctionInstanceQuery