创建与 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接口。

    WMI 不要求在 IWbemLocator上调用 CoCreateInstance时执行任何其他过程。

    下面的代码示例介绍如何初始化 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 连接上设置安全级别

使用 C++ 创建 WMI 应用程序

WMI 中的 IPv6 和 IPv4 支持