Creazione di una connessione a uno spazio dei nomi WMI

Dopo aver impostato le chiamate standard a COM, è quindi necessario connettersi a WMI tramite una chiamata al metodo IWbemLocator::ConnectServer . Il metodo ConnectServer restituisce un proxy di un'interfaccia IWbemServices . Tramite IWbemServices è possibile accedere alle diverse funzionalità di WMI.

Gli esempi di codice in questo argomento richiedono i riferimenti seguenti e le istruzioni #include per la compilazione corretta.

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

La procedura seguente descrive come creare una connessione a uno spazio dei nomi WMI.

Per creare una connessione a uno spazio dei nomi WMI

  • Inizializzare l'interfaccia IWbemLocator tramite una chiamata a CoCreateInstance.

    WMI non richiede alcuna procedura aggiuntiva quando si chiama CoCreateInstance in IWbemLocator.

    Nell'esempio di codice seguente viene descritto come inizializzare 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.
        }
    
    • Connettersi a WMI tramite una chiamata al metodo IWbemLocator::ConnectServer .

      Il metodo ConnectServer restituisce un proxy a un'interfaccia IWbemServices che usa per accedere allo spazio dei nomi WMI locale o remoto specificato nella chiamata a ConnectServer.

      Nell'esempio di codice seguente viene descritto come chiamare 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;
      

Dopo aver ricevuto un puntatore al proxy IWbemServices , è necessario impostare la sicurezza sul proxy per accedere a WMI. Per altre informazioni, vedere Impostazione dei livelli di sicurezza in una connessione WMI.

Creazione di un'applicazione WMI con C++

Supporto IPv6 e IPv4 in WMI