Настройка безопасности для IWbemServices и других прокси-серверов
Хотя в C++ можно настроить безопасность во всем процессе, вызвав CoInitializeSecurity перед подключением к WMI через IWbemLocator::ConnectServer. Вы также можете изменить уровень аутентификации, уровень олицетворения или службу аутентификации в вызове, который получает указатель на прокси-сервер WMI, например IWbemServices или IWbemCallResult. Вызов CoSetProxyBlanket также позволяет изменить сервис аутентификации (Kerberos, NTLM или использовать метод согласования).
Скрипты и приложения Visual Basic устанавливают безопасность только для прокси-серверов косвенно с помощью вызовов SWbemServices и других объектов автоматизации. Дополнительные сведения о настройке и изменении проверки подлинности и олицетворения в скрипте см. в разделе Настройка уровня безопасности процесса по умолчанию с помощьюVBScript.
Изменение уровней безопасности или служб в основном является проблемой при подключении к WMI на удаленном компьютере под управлением другой операционной системы. Дополнительные сведения см. в разделе Подключение между разными операционными системами.
Клиентское приложение подключается к прокси-серверу WMI с помощью удостоверения. Удостоверение — это объект данных, состоящий из имени пользователя, пароля и настроек полномочий. Для клиентского приложения WMI вызов интерфейса IWbemLocator::ConnectServer создает исходную учетную запись. Метод ConnectServer принимает удостоверение в наборе трех параметров, которые можно установить как NULL, чтобы указать на текущего пользователя. Можно также указать параметр, отличный отNULL, чтобы указать определенного пользователя и домена. Если вызов выполнен успешно, ConnectServer возвращает указатель, с помощью которого можно получить доступ к различным удаленным процессам, таким как служба WMI или операционная система Windows напрямую.
Как и многие интерфейсы COM, ConnectServer возвращает указатель на прокси-сервер. Прокси-сервер — это объект данных, представляющий удаленный процесс, например WMI или удаленный поставщик. COM использует прокси-сервер для предоставления разработчикам доступа к удаленным данным, как если бы данные были локальными.
Следующие интерфейсы WMI используют прокси-серверы:
IWbemServices ( объектSWbemServices скриптов)
IWbemRefresher (скриптовый объектSWbemRefresher)
Средство обновления WMI — это особый случай, так как ему передается указатель IWbemServices, параметры безопасности которого должны быть правильно заданы. Дополнительные сведения об использовании объектов обновления данных см. в разделе доступ к данным о производительности в C++.
После получения указателя на удаленный процесс можно выполнить одно из двух действий. Если вы знаете, что делает процесс, вы можете установить настройки безопасности для указателя и получить доступ к процессу обычным образом. Это относится к большинству указателей на службу WMI. Дополнительные сведения см. в разделе Установление уровней безопасности для подключения WMI. Кроме того, необходимо получить доступ к другому COM-интерфейсу на прокси-сервере, например IUnknown::Release, через вызов интерфейса IUnknown на прокси-сервере.
Значения по умолчанию и рекомендации
Распределенная версия объектной модели компонента (DCOM) согласовывает службу проверки подлинности по умолчанию (Kerberos, NTLM или Negotiate), и вы не можете указать службу проверки подлинности по умолчанию с помощью CoInitializeSecurity. Указание RPC_C_AUTHN_DEFAULT в параметре службы проверки подлинности CoSetProxyBlanket позволяет DCOM выбрать соответствующую службу. Для удаленных подключений служба по умолчанию — "Согласование", которая является рекомендуемой службой для приложений, функционируют как в доменах Kerberos, так и в доменах, отличных от Kerberos. Для локальных подключений служба проверки подлинности по умолчанию — NT LAN Manager (NTLM).
В следующем примере кода показана используемая по умолчанию служба проверки подлинности.
// The pWbemServices variable is of type IWbemServices*
HRESULT hr = CoSetProxyBlanket(
pWbemServices, //Proxy
RPC_C_AUTHN_DEFAULT, //Authentication service
RPC_C_AUTHZ_DEFAULT, //Authorization service
COLE_DEFAULT_PRINCIPAL, //Server principal name used
// by authentication service
RPC_C_AUTHN_LEVEL_DEFAULT, //Authentication level
RPC_C_IMP_LEVEL_IMPERSONATE, //Impersonation level
COLE_DEFAULT_AUTHINFO, //Client identity
EOAC_DEFAULT //Capability flags
);
В примере кода в этом разделе требуются следующие директивы #include и ссылки.
#define _WIN32_DCOM
#include <wbemidl.h>
#include <comdef.h>
#pragma comment(lib, "wbemuuid.lib")
Для сценариев рекомендуется использовать значения по умолчанию, которые DCOM выбирает для удаленных вызовов. На локальном компьютере невозможно указать службу проверки подлинности для вызовов WMI. Дополнительные сведения см. в разделах Настройка службы проверки подлинности с помощью VBScript и Создание строки Moniker.