ExecNotificationQueryWmi 函数
执行查询以接收事件。 调用会立即返回,并且调用方可以在返回的事件发生时轮询返回的枚举器。 释放返回的枚举器将取消查询。
注意
此 API 仅供内部使用。 不应从开发人员代码中使用。
语法
HRESULT ExecNotificationQueryWmi (
[in] BSTR strQueryLanguage,
[in] BSTR strQuery,
[in] long lFlags,
[in] IWbemContext* pCtx,
[out] IEnumWbemClassObject** ppEnum,
[in] DWORD authLevel,
[in] DWORD impLevel,
[in] IWbemServices* pCurrentNamespace,
[in] BSTR strUser,
[in] BSTR strPassword,
[in] BSTR strAuthority
);
参数
strQueryLanguage
[in] Windows 管理支持的有效查询语言的字符串。 它必须是“WQL”(WMI 查询语言的首字母缩写)。
strQuery
[in] 查询的文本。 此参数不能为 null
。
lFlags
[in] 影响此函数的行为的以下两个标志的组合。 这些值在 WbemCli.h 头文件中定义,也可以将它们定义为代码中的常量。
常数 | Value | 说明 |
---|---|---|
WBEM_FLAG_RETURN_IMMEDIATELY |
0x10 | 此标志会导致半同步调用。 如果未设置此标志,则调用失败。 这是因为事件是连续收到的,这意味着用户必须轮询返回的枚举器。 无限期地阻止此调用会导致无法做到这一点。 |
WBEM_FLAG_FORWARD_ONLY |
0x20 | 函数返回只进枚举器。 通常,相较于传统枚举器,只进枚举器更快并且使用的内存更少,但它们不允许调用克隆。 |
pCtx
[in] 通常,此值为 null
。 否则,它是一个指向 IWbemContext 实例的指针,提供请求的事件的提供程序可以使用该实例。
ppEnum
[out] 如果未发生错误,则接收指向枚举器的指针,该枚举器允许调用方检索查询结果集中的实例。 有关详细信息,请参阅备注部分。
authLevel
[in] 授权级别。
impLevel
[in] 模拟级别。
pCurrentNamespace
[in] 指向表示当前命名空间的 IWbemServices 对象的指针。
strUser
[in] 用户名。 有关详细信息,请参阅 ConnectServerWmi 函数。
strPassword
[in] 密码。 有关详细信息,请参阅 ConnectServerWmi 函数。
strAuthority
[in] 用户的域名。 有关详细信息,请参阅 ConnectServerWmi 函数。
返回值
此函数返回的以下值是在 WbemCli.h 头文件中定义的,你也可以在代码中将这些值定义为常数:
常数 | Value | 说明 |
---|---|---|
WBEM_E_ACCESS_DENIED |
0x80041003 | 用户无权查看函数可以返回的一个或多个类。 |
WBEM_E_FAILED |
0x80041001 | 发生了未知错误。 |
WBEM_E_INVALID_PARAMETER |
0x80041008 | 参数无效。 |
WBEM_E_INVALID_CLASS |
0x80041010 | 查询指定了不存在的类。 |
WBEMESS_E_REGISTRATION_TOO_PRECISE |
0x80042002 | 请求的传递事件太过精确。 必须指定较大的轮询容错。 |
WBEMESS_E_REGISTRATION_TOO_BROAD |
0x80042001 | 查询请求的信息超出 Windows 管理可以提供的信息。 当事件查询导致请求轮询命名空间中的所有对象时,将返回此 HRESULT 。 |
WBEM_E_INVALID_QUERY |
0x80041017 | 查询具有语法错误。 |
WBEM_E_INVALID_QUERY_TYPE |
0x80041018 | 不支持所请求的查询语言。 |
WBEM_E_QUOTA_VIOLATION |
0x8004106c | 查询太过复杂。 |
WBEM_E_OUT_OF_MEMORY |
0x80041006 | 没有足够的可用内存来完成该操作。 |
WBEM_E_SHUTTING_DOWN |
0x80041033 | WMI 可能已停止并重启。 再次调用 ConnectServerWmi。 |
WBEM_E_TRANSPORT_FAILURE |
0x80041015 | 当前进程和 WMI 之间的远程过程调用 (RPC) 链接已失败。 |
WBEM_E_UNPARSABLE_QUERY |
0x80041058 | 不能解析查询。 |
WBEM_S_NO_ERROR |
0 | 函数调用成功。 |
注解
此函数包装对 IWbemServices::ExecNotificationQuery 方法的调用。
函数返回后,调用方定期将返回的 ppEnum
对象传递给 Next 函数,用于查看是否有可用的事件。
可以在 WQL 查询中使用的 AND
和 OR
关键字的数量存在限制。 复杂查询中使用大量的 WQL 关键字可能导致 WMI 返回 WBEM_E_QUOTA_VIOLATION
(或 0x8004106c)错误代码作为 HRESULT
值。 WQL 关键字的限制取决于查询的复杂程度。
如果该函数调用失败,你可以通过调用 GetErrorInfo 函数获取额外的错误信息。
要求
平台:请参阅系统要求。
标头:WMINet_Utils.idl
.NET Framework 版本:自 4.7.2 起可用