Initialisation de COM pour une application WMI

La première étape de la connexion à WMI consiste à configurer les appels COM à CoInitializeEx et CoInitializeSecurity.

Les exemples de code de cette rubrique nécessitent les références et les instructions #include suivantes pour être compilés correctement.

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

La procédure suivante explique comment initialiser COM à partir d’une application cliente.

Pour initialiser COM à partir d’une application cliente

  1. Initialisez COM en appelant CoInitializeEx.

    L’appel de CoInitializeEx est une procédure standard de configuration d’une interface COM. Ainsi, WMI ne vous oblige pas à suivre des procédures supplémentaires quand vous appelez CoInitializeEx. Pour plus d’informations, consultez COM.

    L’exemple de code suivant explique comment appeler 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. Définissez les niveaux de sécurité COM généraux en appelant l’interface CoInitializeSecurity.

    CoInitializeSecurity est une fonction standard que vous devez appeler quand vous configurez une interface COM pour un processus. Appelez CoInitializeSecurity si vous souhaitez définir les paramètres de sécurité par défaut pour l’authentification, l’emprunt d’identité ou le service d’authentification de l’ensemble d’un processus. Pour plus d’informations, consultez Définition de la sécurité du processus d’application cliente. Si vous souhaitez définir ou changer la sécurité d’un proxy spécifique, vous devez appeler CoSetProxyBlanket. Utilisez CoSetProxyBlanket chaque fois que vous devez définir ou changer la sécurité COM au moment de l’exécution à l’intérieur d’un autre processus où vous ne pouvez pas contrôler les paramètres de sécurité par défaut pour l’authentification, l’emprunt d’identité ou le service d’authentification. Pour plus d’informations, consultez Définition des niveaux de sécurité sur une connexion WMI et Définition de la sécurité sur IWbemServices et d’autres proxys.

    WMI présente plusieurs problèmes de sécurité dont vous devez être conscient quand vous programmez une application cliente WMI. Pour plus d’informations, consultez Définition de la sécurité du processus d’application cliente.

    L’exemple de code suivant explique comment appeler CoInitializeSecurity pour définir la sécurité COM sur le processus.

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

Une fois COM initialisé, l’étape suivante consiste à créer une connexion à un espace de noms WMI. Pour plus d’informations, consultez Création d’une connexion à un espace de noms WMI.

Création d’une application WMI en C++

Accès aux espaces de noms WMI