IWbemServices 接口 (wbemcli.h)
客户端和提供程序使用 IWbemServices 接口访问 WMI 服务。 接口由 WMI 和 WMI 提供程序实现,是主 WMI 接口。
IWbemClassObject *pObj = NULL;
// The pWbemSvc pointer is of type IWbemServices*
// BSTR is not compatible with wchar_t, need to allocate.
BSTR path = SysAllocString(L"path");
pWbemSvc->GetObject(path, 0, 0, &pObj, 0);
SysFreeString(path);
继承
IWbemServices 接口继承自 IUnknown 接口。 IWbemServices 还具有以下类型的成员:
方法
IWbemServices 接口具有这些方法。
IWbemServices::CancelAsyncCall IWbemServices::CancelAsyncCall 方法根据最初传递给异步方法的 IWbemObjectSink 指针取消任何当前挂起的异步调用。 |
IWbemServices::CreateClassEnum IWbemServices::CreateClassEnum 方法返回满足选择条件的所有类的枚举器。 |
IWbemServices::CreateClassEnumAsync IWbemServices::CreateClassEnumAsync 方法返回类提供程序支持的所有类的枚举。 |
IWbemServices::CreateInstanceEnum IWbemServices::CreateInstanceEnum 方法创建一个枚举器,该枚举器根据用户指定的选择条件返回指定类的实例。 |
IWbemServices::CreateInstanceEnumAsync IWbemServices::CreateInstanceEnumAsync 方法创建一个枚举器,该枚举器根据用户指定的选择条件异步返回指定类的实例。 |
IWbemServices::D eleteClass IWbemServices::D eleteClass 方法从当前命名空间中删除指定的类。 |
IWbemServices::D eleteClassAsync IWbemServices::D eleteClassAsync 方法从当前命名空间中删除指定的类。 |
IWbemServices::DeleteInstance IWbemServices::D eleteInstance 方法删除当前命名空间中现有类的实例。 |
IWbemServices::D eleteInstanceAsync IWbemServices::D eleteInstanceAsync 方法异步删除当前命名空间中现有类的实例。 操作的确认或失败通过调用方实现的 IWbemObjectSink 接口报告。 |
IWbemServices::ExecMethod 执行 CIM 对象导出的方法。 |
IWbemServices::ExecMethodAsync 异步执行 CIM 对象导出的方法。 |
IWbemServices::ExecNotificationQuery IWbemServices::ExecNotificationQuery 方法执行查询以接收事件。 调用会立即返回,用户可以轮询返回的枚举器,以便在事件到达时轮询这些事件。 释放返回的枚举器将取消查询。 |
IWbemServices::ExecNotificationQueryAsync IWbemServices::ExecNotificationQueryAsync 方法执行与 IWbemServices::ExecNotificationQuery 相同的任务,只不过事件将提供给指定的响应处理程序,直到调用 CancelAsyncCall 以停止事件通知。 |
IWbemServices::ExecQuery IWbemServices::ExecQuery 方法执行查询以检索对象。 |
IWbemServices::ExecQueryAsync IWbemServices::ExecQueryAsync 方法执行查询以异步方式检索对象。 |
IWbemServices::GetObject IWbemServices::GetObject 方法检索类或实例。 此方法仅从与当前 IWbemServices 对象关联的命名空间检索对象。 |
IWbemServices::GetObjectAsync IWbemServices::GetObjectAsync 方法根据其路径检索对象(类定义或实例)。 |
IWbemServices::OpenNamespace IWbemServices::OpenNamespace 方法为调用方提供了一个新的 IWbemServices 指针,该指针具有指定的子命名空间作为其操作上下文。 |
IWbemServices::PutClass IWbemServices::P utClass 方法创建新类或更新现有类。 pObject 参数指定的类必须已使用所有必需的属性值正确初始化。 |
IWbemServices::PutClassAsync IWbemServices::P utClassAsync 方法创建新类或更新现有类。 |
IWbemServices::PutInstance IWbemServices::P utInstance 方法创建或更新现有类的实例。 将该实例写入 WMI 存储库。 |
IWbemServices::PutInstanceAsync IWbemServices::P utInstanceAsync 方法异步创建或更新现有类的实例。 更新确认或错误报告通过调用方实现的 IWbemObjectSink 接口提供。 |
IWbemServices::QueryObjectSink IWbemServices::QueryObjectSink 方法允许调用方获取由 Windows 管理导出的通知处理程序。 |
注解
实现 IWbemServices 接口的 提供程序必须遵循其实现的每个方法的文档语义;和 提供程序必须支持指定的错误返回代码。 WMI 实现所有方法,通常每个提供程序在接口上实现一小部分可用功能。 提供程序必须为它们未实现的任何方法返回WBEM_E_PROVIDER_NOT_CAPABLE。
在调用接口方法之前,任何 IWbemServices 方法中的所有出站接口指针都应初始化为 NULL 。 例如,调用 IWbemServices::GetObject 方法会返回一个 IWbemClassObject 接口指针,该指针应在调用 IWbemServices::GetObject 方法之前预先初始化为 NULL。
示例
有关使用 IWbemServices 的多个 C++ 示例,请参阅 WMI C++ 应用程序示例 部分。
下面的代码示例演示提供程序如何获取 IWbemServices 指针。 代码需要以下 #include 语句和引用才能编译。
#include <iostream>
using namespace std;
#include <wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
IWbemLocator *pIWbemLocator = NULL;
HRESULT hRes = CoCreateInstance (
CLSID_WbemAdministrativeLocator,
NULL ,
CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER ,
IID_IUnknown ,
( void ** ) &pIWbemLocator
) ;
IWbemServices *pWbemServices = NULL;
if (SUCCEEDED(hRes))
{
BSTR namespace = SysAllocString(L"root\\CIMV2");
hRes = pIWbemLocator->ConnectServer(
namespace, // Namespace
NULL, // Userid
NULL, // PW
NULL, // Locale
0, // flags
NULL, // Authority
NULL, // Context
&pWbemServices
);
SysFreeString(namespace);
pIWbemLocator->Release(); // Free memory resources.
// Use pWbemServices
}
// Clean up
pWbemServices->Release();
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista |
最低受支持的服务器 | Windows Server 2008 |
目标平台 | Windows |
标头 | wbemcli.h (包括 Wbemidl.h) |