Inicialización de COM para una aplicación de WMI

El primer paso para conectarse a WMI es configurar las llamadas COM a CoInitializeEx y CoInitializeSecurity.

Los ejemplos de código de este tema requieren las siguientes referencias e incluye instrucciones para compilarse correctamente.

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

En el procedimiento siguiente se describe cómo inicializar COM desde una aplicación cliente.

Para inicializar COM desde una aplicación cliente

  1. Inicialice COM con una llamada a CoInitializeEx.

    Llamar a CoInitializeEx es un procedimiento estándar para configurar una interfaz COM. Por lo tanto, WMI no requiere que observe ningún procedimiento adicional al llamar a CoInitializeEx. Para más información, consulte COM.

    En el ejemplo de código siguiente se describe cómo llamar a 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. Establezca los niveles de seguridad COM generales con una llamada a la interfaz CoInitializeSecurity.

    CoInitializeSecurity es una función estándar que debe llamar al configurar una interfaz COM para un proceso. Llame a CoInitializeSecurity si desea establecer la configuración de seguridad predeterminada para la autenticación, suplantación o servicio de autenticación de un proceso completo. Para obtener más información, consulte Configuración de la seguridad del proceso de aplicación cliente. Si desea establecer o cambiar la seguridad de un proxy específico, debe llamar a CoSetProxyBlanket. Use CoSetProxyBlanket siempre que deba establecer o cambiar la seguridad COM cuando se ejecute dentro de otro proceso en el que no pueda controlar la configuración de seguridad predeterminada para el servicio de autenticación y suplantación. Para más información, consulte Establecimiento de los niveles de seguridad en una conexión WMI y Establecimiento de la seguridad en IWbemServices y otros servidores proxy.

    WMI tiene varios problemas de seguridad que debe tener en cuenta al programar una aplicación cliente WMI. Para más información, consulte Configuración de la seguridad del proceso de aplicación cliente.

    En el ejemplo de código siguiente se describe cómo llamar a CoInitializeSecurity para establecer la seguridad COM en el proceso.

    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.
    }
    

Después de inicializar COM, el siguiente paso es crear una conexión a un espacio de nombres WMI. Para más información, consulte Creación de una conexión a un espacio de nombres de WMI.

Creación de una aplicación de WMI mediante C++

Acceso a espacios de nombres WMI