Инициализация 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 из клиентского приложения
Инициализация 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; }
Задайте общие уровни безопасности 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.
Связанные темы