Partilhar via


Inicializar o COM para um aplicativo WMI

A primeira etapa na conexão com o WMI é configurar as chamadas COM para CoInitializeEx e CoInitializeSecurity.

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 <wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")

O procedimento a seguir descreve como inicializar o COM de um aplicativo cliente.

Para inicializar o COM de um aplicativo cliente

  1. Inicialize o COM fazendo uma chamada para CoInitializeEx.

    Chamar CoInitializeEx é um procedimento padrão para configurar uma interface COM. Portanto, o WMI não exige que você observe procedimentos adicionais ao chamar CoInitializeEx. Para saber mais, confira COM.

    O exemplo de código a seguir descreve como chamar 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. Defina os níveis gerais de segurança do COM fazendo uma chamada para a interface CoInitializeSecurity.

    CoInitializeSecurity é uma função padrão que você deve chamar ao configurar uma interface COM para um processo. Chame CoInitializeSecurity se quiser definir as configurações de segurança padrão para autenticação, representação ou serviço de autenticação para um processo inteiro. Para obter mais informações, consulte Configurar a segurança do processo do aplicativo cliente. Se quiser definir ou alterar a segurança de um proxy específico, chame CoSetProxyBlanket. Use CoSetProxyBlanket sempre que precisar definir ou alterar a segurança do COM quando executado dentro de outro processo em que não é possível controlar as configurações de segurança padrão para autenticação, representação ou serviço de autenticação. Para obter mais informações, consulte Definir os níveis de segurança em uma conexão WMI e Definir a segurança no IWbemServices e em outros proxies.

    O WMI tem vários problemas de segurança que você deve estar ciente ao programar um aplicativo cliente WMI. Para obter mais informações, consulte Configurar a segurança do processo do aplicativo cliente.

    O exemplo de código a seguir descreve como chamar CoInitializeSecurity para definir a segurança do COM no 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.
    }
    

Depois de inicializar o COM, a próxima etapa é criar uma conexão com um namespace do WMI. Para obter mais informações, consulte Criar uma conexão com um namespace do WMI.

Criar um aplicativo WMI usando C++

Acesso a namespaces do WMI