Инициализация COM для приложения WMI

Первым шагом при подключении к WMI является настройка COM-вызовов CoInitializeEx и CoInitializeSecurity.

Для правильной компиляции примеров кода в этом разделе требуются следующие ссылки и инструкции #include.

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

В следующей процедуре описывается, как инициализировать COM из клиентского приложения.

Инициализация COM из клиентского приложения

  1. Инициализация COM с помощью вызова CoInitializeEx.

    Вызов CoInitializeEx — это стандартная процедура для настройки COM-интерфейса. Поэтому WMI не требует соблюдения дополнительных процедур при вызове CoInitializeEx. Дополнительные сведения см. в разделе COM.

    В следующем примере кода описывается вызов 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. Задайте общие уровни безопасности COM с помощью вызова интерфейса CoInitializeSecurity .

    CoInitializeSecurity — это стандартная функция, которую необходимо вызвать при настройке COM-интерфейса для процесса. Вызовите CoInitializeSecurity, если вы хотите задать параметры безопасности по умолчанию для проверки подлинности, олицетворения или службы проверки подлинности для всего процесса. Дополнительные сведения см. в разделе Настройка безопасности процессов клиентских приложений. Если вы хотите задать или изменить безопасность для определенного прокси-сервера, необходимо вызвать CoSetProxyBlanket. Используйте CoSetProxyBlanket всякий раз, когда необходимо задать или изменить безопасность COM при выполнении в другом процессе, где вы не можете управлять параметрами безопасности по умолчанию для проверки подлинности, олицетворения или службы проверки подлинности. Дополнительные сведения см. в разделах Настройка уровней безопасности для WMI-подключения и Настройка безопасности для IWbemServices и других прокси-серверов.

    WMI имеет несколько проблем безопасности, которые следует учитывать при программировании клиентского приложения WMI. Дополнительные сведения см. в разделе Настройка безопасности процессов клиентских приложений.

    В следующем примере кода описывается, как вызвать CoInitializeSecurity для настройки безопасности COM в процессе.

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

После инициализации COM необходимо создать подключение к пространству имен WMI. Дополнительные сведения см. в разделе Создание подключения к пространству имен WMI.

Создание приложения WMI с помощью C++

Доступ к пространствам имен WMI