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 では、IWbemLocatorCoCreateInstance を呼び出すときに追加のプロシージャを実行する必要はありません。

    次のコード例は、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 メソッドでは、ConnectServer の呼び出しで指定されたローカルまたはリモート WMI 名前空間へのアクセスに使用するプロキシを IWbemServices インターフェイスに返します。

      次のコード例は、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 のサポート