客户端和提供商使用IWbemServices接口访问WMI服务。该接口由WMI和WMI提供商实现,是主要的WMI接口。
IWbemClassObject *pObj = NULL;
//The pWbemSvc pointer is of type IWbemServices*
pWbemSvc->GetObject(L"path", 0, 0, &pObj, 0);
方法
IWbemServices接口继承了IUnknown接口的方法。
此外,IWbemServices定义了以下方法。
方法 |
描述 |
OpenNamespace |
打开特定的子命名空间进行操作。 |
CancelAsyncCall |
取消当前正在执行的异步调用。 |
QueryObjectSink |
允许呼叫者获取通知处理程序接收器。 |
GetObject |
检索一个对象—一个实例或类定义。 |
GetObjectAsync |
异步检索一个对象—一个实例或类定义。 |
PutClass |
创建或更新类定义。 |
PutClassAsync |
异步地创建或更新类定义。 |
DeleteClass |
删除一个类。 |
DeleteClassAsync |
删除一个类,并以异步方式接收确认。 |
CreateClassEnum |
创建一个类枚举器。 |
CreateClassEnumAsync |
创建一个异步执行的类枚举器。 |
PutInstance |
创建或更新特定类的实例。 |
PutInstanceAsync |
异步地创建或更新特定类的实例。 |
DeleteInstance |
删除实例并异步提供确认。 |
CreateInstanceEnum |
创建实例枚举器。 |
CreateInstanceEnumAsync |
创建一个异步执行的实例枚举器。 |
ExecQuery |
执行查询以检索类或实例。 |
ExecQueryAsync |
执行查询以异步检索类或实例。 |
ExecNotificationQuery |
执行查询以接收事件。 |
ExecNotificationQueryAsync |
执行查询以异步接收事件。 |
ExecMethod |
执行一个对象方法。 |
ExecMethodAsync |
异步执行对象方法。 |
备注
实现IWbemServices接口的提供商必须遵循他们实现的每种方法的记录语义;提供者必须支持指定的错误返回码。WMI实现所有的方法,通常,每个提供者实现接口上可用功能的一小部分。提供者必须为其不实现的任何方法返回WBEM_E_PROVIDER_NOT_CAPABLE。
在调用接口方法之前,任何IWbemServices方法的所有出站接口指针都应该初始化为NULL。例如,对IWbemServices.GetObject方法的调用将返回一个IWbemClassObject接口指针,该指针应在IWbemServices.GetObject方法调用之前预先初始化为NULL。
示例代码[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))
{
hRes = pIWbemLocator->ConnectServer(
L"root\\CIMV2", // Namespace
NULL, // Userid
NULL, // PW
NULL, // Locale
0, // flags
NULL, // Authority
NULL, // Context
&pWbemServices
);
pIWbemLocator->Release(); // Free memory resources.
// Use pWbemServices
}
// Clean up
pWbemServices->Release();
要求
客户 |
需要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。 |