Initialisieren von COM für eine WMI-Anwendung

Der erste Schritt beim Herstellen einer Verbindung mit WMI besteht darin, die COM-Aufrufe von CoInitializeEx und CoInitializeSecurity einzurichten.

Für die Codebeispiele in diesem Thema sind die folgenden Verweise und #include-Anweisungen erforderlich, um ordnungsgemäß kompiliert zu werden.

#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 durch einen Aufruf von CoInitializeEx.

    Das Aufrufen von CoInitializeEx ist ein Standardverfahren zum Einrichten einer COM-Schnittstelle. Daher erfordert WMI beim Aufrufen von CoInitializeEx keine zusätzlichen Prozeduren. Weitere Informationen finden Sie unter COM.

    Im folgenden Codebeispiel wird beschrieben, wie ConnectServer aufgerufen 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 Schnittstelle CoInitializeSecurity 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 Authentifizierung, Identitätswechsel oder Authentifizierungsdienst für einen gesamten Prozess festlegen möchten. Weitere Informationen finden Sie unter Einstellen der Prozesssicherheit für Clientanwendungen. Wenn Sie die Sicherheit für einen bestimmten Proxy festlegen oder ändern möchten, müssen Sie CoSetProxyBlanket aufrufen. 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 Authentifizierung, Identitätswechsel oder 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, auf die Sie beim Programmieren einer WMI-Clientanwendung achten sollten. Weitere Informationen finden Sie unter Einstellen der Prozesssicherheit für Clientanwendungen.

    Im folgenden Codebeispiel wird beschrieben, wie Sie CoInitializeSecurity aufrufen, um die 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 zu erstellen. Weitere Informationen finden Sie unter Erstellen einer Verbindung zu einem WMI-Namespace.

Erstellen einer WMI-Anwendung mithilfe von C++

Zugriff auf WMI-Namespaces