Provider::ExecQuery 方法 (provider.h)
[Provider 类是 WMI 提供程序框架的一部分,现在视为处于最终状态,对于影响这些库的非安全性相关问题,将不会提供进一步的开发、增强或更新。 所有新开发均应使用 MI API。]
WMI 调用 ExecQuery 方法来处理 WMI 查询语言 (WQL) 查询。
语法
HRESULT ExecQuery(
MethodContext *pMethodContext,
[ref] CFrameworkQuery & cQuery,
long lFlags
);
parameters
pMethodContext
指向此调用的上下文对象的指针。 此值包含客户端指定的任何 IWbemContext 属性。 此外,此指针必须用作对 WMI 的任何调用的参数。
[ref] cQuery
指向提供程序框架已分析的查询的指针。
lFlags
包含有关执行查询操作信息的标志的位掩码。 这是 客户端在 IWbemServices::ExecQuery 方法中指定的值。
以下标志由 (处理,并通过 WMI 筛选出) :
- WBEM_FLAG_ENSURE_LOCATABLE
- WBEM_FLAG_FORWARD_ONLY
- WBEM_FLAG_BIDIRECTIONAL
- WBEM_FLAG_USE_AMENDED_QUALIFIERS
- WBEM_FLAG_RETURN_IMMEDIATELY
- WBEM_FLAG_PROTOTYPE
返回值
此方法的默认框架提供程序实现将 WBEM_E_PROVIDER_NOT_CAPABLE 返回到调用方法。 IWbemServices::ExecQuery 方法列出了常见的返回值,不过你可以选择返回任何 COM 返回代码。
注解
WMI 经常调用 ExecQuery 以响应客户端对 IWbemServices::ExecQuery 的调用,其中客户端传入所选属性的列表或 WHERE 子句。 如果客户端查询包含描述类的“ASSOCIATORS OF”或“REFERENCES OF”语句,WMI 还可以调用 ExecQuery 。 如果 ExecQuery 的实现返回 WBEM_E_NOT_SUPPORTED,则客户端依赖于 WMI 来处理查询。
WMI 通过调用 CreateInstanceEnum 的实现来处理查询,以提供所有实例。 然后,WMI 先筛选生成的实例,然后再将实例返回到客户端。 因此,创建的任何 ExecQuery 实现都必须比 CreateInstanceEnum 更高效。
下面介绍了 ExecQuery 的常见实现:
- 使用 Provider::CreateNewInstance 创建类的空实例。
-
确定应创建的实例的子集。
可以使用 IsPropertyRequired 等方法来查看所需的属性,使用 GetValuesForProp 查看 WMI 需要哪些实例。 处理请求的属性的其他方法包括 CFrameworkQuery::GetRequiredProperties、 CFrameworkQuery::AllPropertiesAreRequired 和 CFrameworkQuery::KeysOnly。
- 使用 CInstance 类的 Set 方法填充空实例的属性,例如 CInstance::SetByte 或 CInstance::SetStringArray。
- 使用 CInstance::Commit 将实例发送回客户端。
-
返回相应的返回值。
默认 的 ExecQuery 框架提供程序实现返回 WBEM_E_PROVIDER_NOT_CAPABLE。 如果实现 ExecQuery,则应使用 IWbemServices::ExecQuery 中列出的常见返回值。 但是,如有必要,可以返回任何 COM 返回代码。
但是,在编写框架提供程序时,应牢记以下事项:
- 请确保在关联类中支持标准查询,尤其是在 WHERE 子句中使用引用属性的查询。 有关详细信息,请参阅 CFrameworkQuery::GetValuesForProp。
-
在关联类支持中,检查查看终结点是否存在时,请确保使用 CWbemProviderGlue::GetInstanceKeysByPath 或 CWbemProviderGlue::GetInstancePropertiesByPath 方法。
这些方法允许终结点跳过填充资源密集型或不需要的属性。
- 请确保任何关联终结点类都支持每个属性 的 Get 方法。 有关详细信息,请参阅 支持 Partial-Instance 操作。 有关查询参数的详细信息,请参阅 CFrameworkQuery。
要求
最低受支持的客户端 | Windows Vista |
最低受支持的服务器 | Windows Server 2008 |
目标平台 | Windows |
标头 | provider.h (包括 FwCommon.h) |
Library | FrameDyn.lib |
DLL | FrameDynOS.dll;FrameDyn.dll |