创建到 WMI 命名空间的连接
设置对 COM 的标准调用后,必须通过调用 IWbemLocator::ConnectServer 方法连接到 WMI。 ConnectServer 方法返回 IWbemServices 接口的代理。 通过 IWbemServices,你可以访问 WMI 的不同功能。
本主题中的代码示例需要以下引用和 #include 语句才能正确编译。
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <windows.h>
#include <wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
以下过程介绍了如何创建与 WMI 命名空间的连接。
创建与 WMI 命名空间的连接
通过调用 CoCreateInstance 来初始化 IWbemLocator 接口。
对 IWbemLocator 调用 CoCreateInstance 时,WMI 不要求你执行任何附加过程。
以下代码示例展示了如何初始化 IWbemLocator。
IWbemLocator *pLoc = 0; HRESULT hr; hr = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc); if (FAILED(hr)) { cout << "Failed to create IWbemLocator object. Err code = 0x" << hex << hr << endl; CoUninitialize(); return hr; // Program has failed. }
通过调用 IWbemLocator::ConnectServer 方法连接到 WMI。
ConnectServer 方法返回 IWbemServices 接口的一个代理,该代理用来访问在 ConnectServer 调用中指定的本地或远程 WMI 命名空间。
以下代码示例展示了如何调用 ConnectServer。
IWbemServices *pSvc = 0; // Connect to the root\default namespace with the current user. hr = pLoc->ConnectServer( BSTR(L"ROOT\\DEFAULT"), //namespace NULL, // User name NULL, // User password 0, // Locale NULL, // Security flags 0, // Authority 0, // Context object &pSvc); // IWbemServices proxy if (FAILED(hr)) { cout << "Could not connect. Error code = 0x" << hex << hr << endl; pLoc->Release(); CoUninitialize(); return hr; // Program has failed. } cout << "Connected to WMI" << endl;
收到指向 IWbemServices 代理的指针后,必须在代理上设置安全性才能访问 WMI。 有关详细信息,请参阅在 WMI 连接上设置安全级别。
相关主题