Initialisieren von COM für eine WMI-Anwendung

Der erste Schritt beim Herstellen einer Verbindung mit WMI ist das Einrichten der COM-Aufrufe von CoInitializeEx und CoInitializeSecurity.

Die Codebeispiele in diesem Thema erfordern die folgenden Verweise und # include-Anweisungen, um ordnungsgemäß zu kompilieren.

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

Im folgenden Verfahren wird beschrieben, wie COM aus einer Clientanwendung initialisiert wird.

So initialisieren Sie COM aus einer Clientanwendung

  1. Initialisieren Sie COM mit einem Aufruf von CoInitializeEx.

    Das Aufrufen von CoInitializeEx ist eine Standardprozedur zum Einrichten einer COM-Schnittstelle. Daher erfordert WMI nicht, dass Sie beim Aufrufen von CoInitializeEx zusätzliche Prozeduren beobachten. Weitere Informationen finden Sie unter COM.

    Im folgenden Codebeispiel wird beschrieben, wie CoInitializeExaufgerufen wird.

    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. Legen Sie die allgemeinen COM-Sicherheitsstufen mit einem Aufruf der CoInitializeSecurity-Schnittstelle fest.

    CoInitializeSecurity ist eine Standardfunktion, die Sie beim Einrichten einer COM-Schnittstelle für einen Prozess aufrufen müssen. Rufen Sie CoInitializeSecurity auf, wenn Sie die Standardsicherheitseinstellungen für die Authentifizierung, den Identitätswechsel oder den Authentifizierungsdienst für einen gesamten Prozess festlegen möchten. Weitere Informationen finden Sie unter Festlegen der Sicherheit des Clientanwendungsprozesses. Wenn Sie die Sicherheit für einen bestimmten Proxy festlegen oder ändern möchten, müssen Sie CoSetProxyBlanketaufrufen. Verwenden Sie CoSetProxyBlanket immer dann, wenn Sie die COM-Sicherheit festlegen oder ändern müssen, wenn Sie in einem anderen Prozess ausgeführt werden, bei dem Sie die Standardsicherheitseinstellungen für die Authentifizierung, den Identitätswechsel oder den Authentifizierungsdienst nicht steuern können. Weitere Informationen finden Sie unter Festlegen der Sicherheitsstufen für eine WMI-Verbindung und Festlegen der Sicherheit für IWbemServices und andere Proxys.

    WMI weist mehrere Sicherheitsprobleme auf, die Sie beim Programmieren einer WMI-Clientanwendung beachten sollten. Weitere Informationen finden Sie unter Festlegen der Sicherheit des Clientanwendungsprozesses.

    Im folgenden Codebeispiel wird beschrieben, wie CoInitializeSecurity aufgerufen wird, um com-Sicherheit für den Prozess festzulegen.

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

Nachdem Sie COM initialisiert haben, besteht der nächste Schritt darin, eine Verbindung mit einem WMI-Namespace herzustellen. Weitere Informationen finden Sie unter Erstellen einer Verbindung mit einem WMI-Namespace.

Erstellen einer WMI-Anwendung mit C++

Zugriff auf WMI-Namespaces