Compartilhar via


Criar uma conexão com um namespace WMI

Depois de definir as chamadas padrão para o COM, você deverá se conectar ao WMI por meio de uma chamada ao método IWbemLocator::ConnectServer . O método ConnectServer retorna um proxy de uma interface IWbemServices. Por meio do IWbemServices, você pode acessar os diferentes recursos do WMI.

Os exemplos de código neste tópico exigem que as referências e instruções #include a seguir sejam compiladas corretamente.

#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <windows.h>
#include <wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")

O procedimento a seguir descreve como criar uma conexão com um namespace WMI.

Para criar uma conexão com um namespace WMI

  • Inicialize a interface IWbemLocator por meio de uma chamada para CoCreateInstance.

    O WMI não exige que você execute procedimentos adicionais ao chamar CoCreateInstance no IWbemLocator.

    O exemplo de código a seguir descreve como inicializar 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.
        }
    
    • Conecte-se ao WMI por meio de uma chamada ao método IWbemLocator::ConnectServer.

      O método ConnectServer retorna um proxy para uma interface IWbemServices que é usada para acessar o namespace WMI local ou remoto especificado na chamada a ConnectServer.

      O exemplo de código a seguir descreve como chamar o 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;
      

Depois de receber um ponteiro para o proxy IWbemServices, você deve definir a segurança no proxy para acessar o WMI. Para obter mais informações, consulte Definir níveis de segurança em uma conexão WMI.

Criar um aplicativo WMI usando C++

Suporte a IPv6 e IPv4 no WMI