Поделиться через


Инициализация 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