勇芳软件工作室.汉化:  Windows Management Instrumentation > COM API for WMI > Interfaces > IWbemServices >

ExecNotificationQueryAsync Method

Previous pageReturn to chapter overviewNext page

描述

 

IWbemServices.ExecNotificationQueryAsync方法执行与IWbemServices.ExecNotificationQuery相同的任务,除了事件提供给指定的响应处理程序,直到CancelAsyncCall被调用才能停止事件通知。

 

C++ 语法

 

HRESULT ExecNotificationQueryAsync(

[in]  const BSTR strQueryLanguage,

[in]  const BSTR strQuery,

[in]  long lFlags,

[in]  IWbemContext *pCtx,

[in]  IWbemObjectSink *pResponseHandler

);

 

PowerBASIC 语法

 

METHOD ExecNotificationQueryAsync ( _

BYVAL strQueryLanguage AS DWORD, _

BYVAL strQuery AS DWORD, _

BYVAL lFlags AS LONG, _

BYVAL pCtx AS IWbemContext, _

BYVAL pResponseHandler AS IWbemObjectSink _

) AS LONG

 

参数

 

strQueryLanguage

 

有效的BSTR包含Windows Management支持的查询语言之一。这必须是“WQL”。

 

strQuery

 

有效BSTR包含事件相关查询的文本。这不能为NULL。

 

lFlags

 

该参数可以是以下值。

 

含义

WBEM_FLAG_SEND_STATUS

该标志通过客户端的实施IWbemObjectSink.SetStatus向Windows Management注册接收中间状态报告的请求。提供商实施必须支持该标志的中间状态报告来改变行为。

 

pCtx

 

通常为NULL。否则,这是指向可以由返回请求的事件的提供者使用的IWbemContext对象的指针。必须在相关提供者的文档中指定上下文对象中的值。有关此参数的更多信息,请参阅拨打电话给WMI.

 

pResponseHandler

 

指向呼叫者执行IWbemObjectSink的指针。该处理程序在查询结果集中可用时接收对象。要停止接收事件,呼叫者必须使用与pResponseHandler相同的指针值来呼叫IWbemServices.CancelAsyncCall.随着事件变得可用,调用提供的IWbemObjectSink.Indicate实现来传递事件对象。任何时候都不会调用IWbemObjectSink.SetStatus方法,因为没有最终或终止条件。呼叫无限期执行,直到取消。如果返回任何错误代码,则不使用提供的IWbemObjectSink指针。如果返回WBEM_S_NO_ERROR,则调用用户的IWbemObjectSink实现来指示操作的结果。如果WBEM_S_NO_ERROR返回,Windows Management只会调用该指针的AddRef.在错误代码返回的情况下,引用计数与输入相同。有关此参数的详细说明,请参阅调用方法.

 

返回值

 

此方法返回一个HRESULT,指示方法调用的状态。下表列出了HRESULT中包含的值。

 

失败后,您可以从COM功能GetErrorInfo获取任何可用的信息。

 

其他错误代码返回到由pResponseHandler参数指定的对象接收器。

 

如果网络问题导致您失去与Windows Management的远程连接,也可以返回COM特定的错误代码。

 

退货代码

描述

WBEM_E_FAILED

这表示其他未指定的错误。

WBEM_E_INVALID_CLASS

该查询指定一个不存在的类。

WBEM_E_INVALID_PARAMETER

指定了无效参数。

WBEM_E_REGISTRATION_TOO_PRECISE

已经要求提供事件精度太高。必须指定较大的轮询容限。

WBEM_E_REGISTRATION_TOO_BROAD

查询请求比Windows Management可以合理提供的更多信息。当事件查询导致轮询命名空间中的所有对象的请求时,返回此消息。

WBEM_E_INVALID_QUERY

该查询在语法上无效。

WBEM_E_INVALID_QUERY_TYPE

不支持请求的查询语言。

WBEM_E_OUT_OF_MEMORY

没有足够的内存来完成操作。

WBEM_E_SHUTTING_DOWN

Windows管理服务已停止并重新启动。需要新的电话ConnectServer.

WBEM_E_TRANSPORT_FAILURE

这表示当前进程和Windows Management之间的远程过程调用(RPC)链接失败。

WBEM_E_UNPARSABLE_QUERY

查询无法解析。

WBEM_S_NO_ERROR

通话成功。

 

备注

 

调用IWbemObjectSink.SetStatus方法来指示结果集的结束。如果发生错误条件,也可以调用IWbemObjectSink.Indicate的中间调用。

 

因为回调可能不会以与客户端所需的相同的身份验证级别返回,所以建议您使用半异步而不是异步通信。如果需要异步通信,请参阅调用方法.

 

有关使用半同步方法的更多信息,请参阅IWbemServices.ExecNotificationQuery调用方法.

 

对于可在WQL查询中使用的ANDOR关键字的数量有限制。复杂查询中使用的大量WQL关键字可能导致WMI返回作为HRESULT值的WBEM_E_QUOTA_VIOLATION错误代码。WQL关键字的限制取决于查询的复杂程度。

 

要求

 

客户

需要Windows Vista,Windows XP,Windows 2000 Professional,Windows NT Workstation 4.0 SP4及更高版本,Windows Me,Windows 98或Windows 95。

服务器

需要Windows Server 2008,Windows Server 2003,Windows 2000 Server或Windows NT Server 4.0 SP4及更高版本。

在Wbemcli.inc中声明。

DLL

需要Fastprox.dll。

需要Esscli.dll。

需要Framedyn.dll。

需要Ntevt.dll。

需要Stdprov.dll。

需要Viewprov.dll。

需要Wbemcomn.dll。

需要Wbemcore.dll。

需要Wbemess.dll。

需要Wbemsvc.dll。

需要Wmipicmp.dll。

需要Wmidcprv.dll。

需要Wmipjobj.dll。

需要Wmiprvsd.dll。