Inizializzazione di COM per un'applicazione WMI

Il primo passaggio per la connessione a WMI consiste nel configurare le chiamate COM a CoInitializeEx e CoInitializeSecurity.

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

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

La procedura seguente descrive come inizializzare COM da un'applicazione client.

Per inizializzare COM da un'applicazione client

  1. Inizializzare COM con una chiamata a CoInitializeEx.

    La chiamata a CoInitializeEx è una procedura standard per la configurazione di un'interfaccia COM. Pertanto, WMI non richiede di osservare procedure aggiuntive quando si chiama CoInitializeEx. Per altre informazioni, vedere COM.

    Nell'esempio di codice seguente viene descritto come chiamare CoInitializeEx.

    HRESULT hr;
    hr = CoInitializeEx(0, COINIT_MULTITHREADED); 
    if (FAILED(hr)) 
    { cout << "Failed to initialize COM library. Error code = 0x"
           << hex << hr << endl; 
      return hr;
    }
    
  2. Impostare i livelli di sicurezza COM generali con una chiamata all'interfaccia CoInitializeSecurity .

    CoInitializeSecurity è una funzione standard che è necessario chiamare quando si configura un'interfaccia COM per un processo. Chiamare CoInitializeSecurity se si desidera impostare le impostazioni di sicurezza predefinite per l'autenticazione, la rappresentazione o il servizio di autenticazione per un intero processo. Per altre informazioni, vedere Impostazione della sicurezza del processo dell'applicazione client. Se si vuole impostare o modificare la sicurezza per un proxy specifico, è necessario chiamare CoSetProxyBlanket. Usare CoSetProxyBlanket ogni volta che è necessario impostare o modificare la sicurezza COM durante l'esecuzione all'interno di un altro processo in cui non è possibile controllare le impostazioni di sicurezza predefinite per l'autenticazione, la rappresentazione o il servizio di autenticazione. Per altre informazioni, vedere Impostazione dei livelli di sicurezza per una connessione WMI e Impostazione della sicurezza in IWbemServices e altri proxy.

    WMI presenta diversi problemi di sicurezza da tenere presenti durante la programmazione di un'applicazione client WMI. Per altre informazioni, vedere Impostazione della sicurezza del processo dell'applicazione client.

    Nell'esempio di codice seguente viene descritto come chiamare CoInitializeSecurity per impostare la sicurezza COM nel processo.

    hr =  CoInitializeSecurity(
        NULL,                        // Security descriptor    
        -1,                          // COM negotiates authentication service
        NULL,                        // Authentication services
        NULL,                        // Reserved
        RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication level for proxies
        RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation level for proxies
        NULL,                        // Authentication info
        EOAC_NONE,                   // Additional capabilities of the client or server
        NULL);                       // Reserved
    
    if (FAILED(hr))
    {
       cout << "Failed to initialize security. Error code = 0x" 
            << hex << hr << endl;
       CoUninitialize();
       return hr;                  // Program has failed.
    }
    

Dopo aver inizializzato COM, il passaggio successivo consiste nel creare una connessione a uno spazio dei nomi WMI. Per altre informazioni, vedere Creazione di una connessione a uno spazio dei nomi WMI.

Creazione di un'applicazione WMI con C++

Accesso agli spazi dei nomi WMI