描述
当逻辑事件使用者向Windows Management注册相关事件查询过滤器时,调用IWbemEventProviderQuerySink.NewQuery方法。NewQuery方法确定提供商如何响应客户端应用程序注册的新查询。当WMI从消费者接收到新的或修改的事件查询时,WMI调用NewQuery将查询回显给事件提供者。提供商然后生成请求的通知。
C++ 语法
HRESULT NewQuery( [in] unsigned long dwId, [in] WBEM_WSTR wszQueryLanguage, [in] WBEM_WSTR wszQuery ); |
PowerBASIC 语法
METHOD NewQuery ( _ BYVAL dwId AS DWORD, _ BYVAL wszQueryLanguage AS DWORD, _ BYVAL wszQuery AS DWORD _ ) AS LONG |
参数
dwId
Windows管理生成的查询标识符。提供商可以跟踪这一点,以便在以后调用CancelQuery时,提供商将知道哪个查询已被取消。
wszQueryLanguage
以下查询过滤器的语言。对于此版本的WMI,它将永远是“WQL”。
wszQuery
由逻辑消费者注册的事件查询过滤器的文本。事件提供者可以通过wszQuery参数和wszQueryLanguage参数中的查询过滤器的语言来检查查询过滤器的文本,以发现消费者正在请求哪些事件通知。
返回值
此方法返回一个HRESULT,指示方法调用的状态。下表列出了NewQuery返回的返回码。另外,第三方事件提供者可以返回可通过NewQuery作为返回值传递的任何有效的WMI或COM返回码。
退货代码 |
描述 |
WBEM_E_ACCESS_DENIED |
用户没有权限访问该事件。 |
WBEM_E_FAILED |
提供程序在内部失败,它不能接受将来的请求。 |
WBEM_E_INVALID_QUERY |
该查询在语法上无效,或查询引用不存在的类,属性等。 |
WBEM_S_NO_ERROR |
提供者收到水槽,它将开始交付事件。 |
备注
如果消费者在Windows Management中注册事件过滤器查询,并且查询包含对当前事件提供程序提供的事件的引用,则Windows Management可以通知事件提供者查询。
如果提供商实现IWbemEventProviderQuerySink接口,则Windows Management将向提供者提供查询文本的副本。提供程序应解析查询,并确定它是否可以执行任何内部优化。
Windows Management并不期望供应商以任何方式改变其行为。相反,这是一个咨询电话,以协助提供商进行内部优化。
例如,如果提供商能够提供数以百计的事件,但是提供所有这些事件所需的开销是巨大的,如果提供者知道大多数这些事件不是当前事件集所需要的,那么提供者可以实现大量的节省消费者。如果提供商实施IWbemEventProviderQuerySink,它将了解所有消费者所要求的当前事件集。它可以避免设置用于传递其支持的大多数事件类型的机制,直到消费者实际开始请求这样的事件。
对于每个新的消费者查询过滤器,将单独调用具有唯一dwId的此方法。请注意,Windows Management保留对相同dwId值多次调用NewQuery的权利;例如,如果系统中其他地方存在模式更改。对于此版本的WMI,查询语言始终为“WQL”。
IWbemEventProviderQuerySink.NewQuery方法可以在IWbemEventProvider.ProvideEvents方法之前调用。
要求
客户 |
需要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及更高版本。 |
头 |
在Wbemprov.inc中声明。 |
DLL |
需要Wbemsvc.dll。 |


