Udostępnij za pośrednictwem


Inicjowanie modelu COM dla aplikacji WMI

Pierwszym krokiem podczas nawiązywania połączenia z usługą WMI jest skonfigurowanie wywołań COM do CoInitializeEx i CoInitializeSecurity.

Przykłady kodu w tym temacie wymagają następujących odwołań i instrukcji #include w celu poprawnego skompilowania.

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

Poniższa procedura opisuje, jak zainicjować COM z aplikacji klienckiej.

Zainicjować COM z aplikacji klienckiej

  1. Inicjalizuj COM, wywołując funkcję CoInitializeEx.

    Wywoływanie CoInitializeEx to standardowa procedura konfigurowania interfejsu COM. W związku z tym usługa WMI nie wymaga przestrzegania żadnych dodatkowych procedur podczas wywoływania CoInitializeEx. Aby uzyskać więcej informacji, zobacz COM.

    W poniższym przykładzie kodu opisano sposób wywoływania 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. Ustaw ogólne poziomy zabezpieczeń COM za pomocą wywołania interfejsu CoInitializeSecurity.

    CoInitializeSecurity to standardowa funkcja, którą należy wywołać podczas konfigurowania interfejsu COM dla procesu. Wywołaj CoInitializeSecurity, jeśli chcesz ustawić domyślne ustawienia zabezpieczeń uwierzytelniania, personifikacji lub usługi uwierzytelniania dla całego procesu. Aby uzyskać więcej informacji, zobacz Ustawianie Bezpieczeństwa Procesu Aplikacji Klienta. Jeśli chcesz ustawić lub zmienić zabezpieczenia dla określonego serwera proxy, musisz wywołać CoSetProxyBlanket. Użyj coSetProxyBlanket zawsze, gdy musisz ustawić lub zmienić zabezpieczenia COM podczas uruchamiania wewnątrz innego procesu, w którym nie można kontrolować domyślnych ustawień zabezpieczeń uwierzytelniania, personifikacji lub usługi uwierzytelniania. Aby uzyskać więcej informacji, zobacz Ustawianie poziomów zabezpieczeń na połączeniu WMI i Ustawianie zabezpieczeń na IWbemServices i innych serwerach proxy.

    Usługa WMI ma kilka problemów z zabezpieczeniami, o których należy pamiętać podczas programowania aplikacji klienckiej usługi WMI. Aby uzyskać więcej informacji, zobacz Ustawianie zabezpieczeń procesu aplikacji klienckiej.

    W poniższym przykładzie kodu opisano sposób wywoływania CoInitializeSecurity w celu ustawienia zabezpieczeń COM dla procesu.

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

Po zainicjowaniu modelu COM następnym krokiem jest utworzenie połączenia z przestrzenią nazw usługi WMI. Aby uzyskać więcej informacji, zobacz Tworzenie połączenia z przestrzenią nazw usługi WMI.

tworzenie aplikacji WMI przy użyciu języka C++

Dostęp do przestrzeni nazw usługi WMI