描述
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查询中使用的AND和OR关键字的数量有限制。复杂查询中使用的大量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。 |