Метод IClientSecurity::SetBlanket (objidl.h)

Задает сведения о проверке подлинности (одеяло безопасности), которые будут использоваться для вызовов указанного прокси-сервера.

Этот параметр переопределяет параметры процесса по умолчанию для указанного прокси-сервера. Вызов этого метода изменяет значения безопасности для всех остальных пользователей указанного прокси-сервера.

Синтаксис

HRESULT SetBlanket(
  [in] IUnknown *pProxy,
  [in] DWORD    dwAuthnSvc,
  [in] DWORD    dwAuthzSvc,
  [in] OLECHAR  *pServerPrincName,
  [in] DWORD    dwAuthnLevel,
  [in] DWORD    dwImpLevel,
  [in] void     *pAuthInfo,
  [in] DWORD    dwCapabilities
);

Параметры

[in] pProxy

Указатель на прокси-сервер.

[in] dwAuthnSvc

Служба проверки подлинности. Это будет одно значение, взятое из списка констант службы проверки подлинности. Если проверка подлинности не требуется, используйте RPC_C_AUTHN_NONE. Если указан RPC_C_AUTHN_DEFAULT, COM выберет службу проверки подлинности, следуя обычному алгоритму согласования общих сведений о безопасности.

[in] dwAuthzSvc

Служба авторизации. Это будет одно значение, взятое из списка констант авторизации. Если указан RPC_C_AUTHZ_DEFAULT, COM выберет службу авторизации, следуя обычному алгоритму согласования общих сведений о безопасности. Если в качестве службы проверки подлинности используется NTLMSSP, Kerberos или Schannel, в качестве службы авторизации следует использовать RPC_C_AUTHZ_NONE.

[in] pServerPrincName

Имя субъекта-сервера. Если указано COLE_DEFAULT_PRINCIPAL, DCOM выберет имя субъекта с помощью алгоритма согласования общих сведений о безопасности. Если в качестве службы проверки подлинности используется Kerberos, этот параметр должен быть правильным именем участника сервера, иначе вызов завершится ошибкой.

Если В качестве службы проверки подлинности используется Schannel, это значение должно быть одной из форм msstd или fullsic, описанных в разделе Имена субъектов, или значением NULL , если не требуется взаимная проверка подлинности.

Как правило, при указании ЗНАЧЕНИЯ NULL имя участника-сервера на прокси-сервере не сбрасывается, вместо этого сохраняется предыдущий параметр. При выборе другой службы проверки подлинности для прокси-сервера необходимо соблюдать осторожность при использовании null в качестве pServerPrincName , так как нет никакой гарантии, что заданное ранее имя участника будет допустимым для только что выбранной службы проверки подлинности.

[in] dwAuthnLevel

Уровень проверки подлинности. Это будет одно значение, взятое из списка констант уровня проверки подлинности. Если указано RPC_C_AUTHN_LEVEL_DEFAULT, COM выберет уровень проверки подлинности, соответствующий обычному алгоритму согласования общих сведений о безопасности. Если это значение равно RPC_C_AUTHN_LEVEL_NONE, служба проверки подлинности должна быть RPC_C_AUTHN_NONE. Каждая служба проверки подлинности может использовать более высокий уровень проверки подлинности, чем указанный.

[in] dwImpLevel

Уровень олицетворения. Это будет одно значение, взятое из списка констант уровня олицетворения. Если указан RPC_C_IMP_LEVEL_DEFAULT, COM выберет уровень олицетворения в соответствии с обычным алгоритмом согласования общих сведений о безопасности. При удаленном использовании NTLMSSP это значение должно быть RPC_C_IMP_LEVEL_IMPERSONATE или RPC_C_IMP_LEVEL_IDENTIFY. При использовании NTLMSSP на том же компьютере также поддерживается RPC_C_IMP_LEVEL_DELEGATE. Для Kerberos это значение может быть RPC_C_IMP_LEVEL_IDENTIFY, RPC_C_IMP_LEVEL_IMPERSONATE или RPC_C_IMP_LEVEL_DELEGATE. Для Schannel это значение должно быть RPC_C_IMP_LEVEL_IMPERSONATE.

[in] pAuthInfo

Значение RPC_AUTH_IDENTITY_HANDLE, указывающее удостоверение клиента. Этот параметр не используется для вызовов на том же компьютере. Если pAuthInfo имеет значение NULL, COM использует текущее удостоверение прокси-сервера, которое является маркером процесса, маркером олицетворения или удостоверением проверки подлинности из функции CoInitializeSecurity . Если дескриптор не равен NULL, используется это удостоверение. Формат структуры, на которую ссылается дескриптор, зависит от поставщика службы проверки подлинности.

Для NTLMSSP или Kerberos структура представляет собой SEC_WINNT_AUTH_IDENTITY или SEC_WINNT_AUTH_IDENTITY_EX структуру. Если клиент получает учетные данные, заданные на прокси-сервере, путем вызова CoQueryProxyBlanket, он должен гарантировать, что память остается допустимой и неизменной до тех пор, пока на прокси-сервере не будет установлено другое удостоверение или все прокси-серверы объекта не будут освобождены.

Если этот параметр имеет значение NULL, COM использует текущее удостоверение прокси-сервера (которое является маркером процесса или маркером олицетворения). Если дескриптор ссылается на структуру, используется это удостоверение.

Для Schannel этот параметр должен быть либо указателем на CERT_CONTEXT структуру, содержащую сертификат X.509 клиента, либо значение NULL , если клиент хочет установить анонимное подключение к серверу. Если указан сертификат, вызывающий объект не должен освобождать его до тех пор, пока в текущем объекте существует прокси-сервер.

Для Snego этот элемент имеет значение NULL, указывает на SEC_WINNT_AUTH_IDENTITY структуру или на SEC_WINNT_AUTH_IDENTITY_EX структуру. Если значение равно NULL, Snego выберет список служб проверки подлинности на основе служб, доступных на клиентском компьютере. Если он указывает на структуру SEC_WINNT_AUTH_IDENTITY_EX , элемент PackageList структуры должен указывать на строку, содержащую разделенный запятыми список имен служб проверки подлинности, а член PackageListLength должен указывать количество байтов в строке PackageList . Если PackageList имеет значение NULL, все вызовы с использованием Snego завершатся ошибкой.

Если указан COLE_DEFAULT_AUTHINFO, COM выберет сведения о проверке подлинности в соответствии с обычным алгоритмом согласования общих сведений о безопасности.

SetBlanket вернет ошибку, если задано значение pAuthInfo и один из флагов маскировки задан в dwCapabilities.

[in] dwCapabilities

Возможности этого прокси-сервера. Флаги возможностей определяются в перечислении EOLE_AUTHENTICATION_CAPABILITIES . С помощью этого метода можно задать только EOAC_MUTUAL_AUTH, EOAC_STATIC_CLOAKING, EOAC_DYNAMIC_CLOAKING, EOAC_ANY_AUTHORITY (этот флаг не рекомендуется), EOAC_MAKE_FULLSIC и EOAC_DEFAULT. Можно задать EOAC_STATIC_CLOAKING или EOAC_DYNAMIC_CLOAKING, если параметр pAuthInfo не задан и Schannel не является службой проверки подлинности. (Дополнительные сведения см. в разделе Маскировка .) Если указаны флаги возможностей, отличные от указанных здесь, SetBlanket вернет ошибку.

Возвращаемое значение

Этот метод может возвращать следующие значения.

Код возврата Описание
S_OK
Метод завершился успешно.
E_INVALIDARG
Один или несколько аргументов недопустимы.

Комментарии

SetBlanket задает сведения о проверке подлинности, которые будут использоваться для выполнения вызовов на указанном прокси-сервере интерфейса. Указанные здесь значения переопределяют значения, выбранные автоматической безопасностью. Вызов этого метода изменяет значения безопасности для всех остальных пользователей указанного прокси-сервера. Если вы хотите, чтобы изменения применялись только к определенному экземпляру прокси-сервера, вызовите IClientSecurity::CopyProxy , чтобы создать частную копию прокси-сервера, а затем вызовите SetBlanket для копии.

При каждом вызове этого метода DCOM задаст удостоверение на прокси-сервере, а последующие вызовы, выполненные с помощью этого прокси-сервера, будут использовать это удостоверение. Вызовы, которые выполняется при вызове SetBlanket , будут использовать сведения о проверке подлинности на прокси-сервере на момент начала вызова. Если pAuthInfo имеет значение NULL, для удостоверения прокси-сервера по умолчанию используется текущий маркер процесса (если при вызове CoInitializeSecurity не было указано удостоверение проверки подлинности). Сведения о том, как флаги маскировки влияют на прокси-сервер, если pAuthInfo имеет значение NULL, см. в статье Маскировка.

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

Если константа по умолчанию для dwImpLevel указана в SetBlanket, параметру по умолчанию присваивается значение CoInitializeSecurity. Если coInitializeSecurity не вызывается, по умолчанию используется RPC_C_IMP_LEVEL_IDENTIFY.

Начальное значение dwAuthnLevel на прокси-сервере будет выше значения, заданного при вызове клиента CoInitializeSecurity и вызове сервера CoInitializeSecurity. Для любого процесса, который не вызывал CoInitializeSecurity, по умолчанию используется уровень проверки подлинности RPC_C_AUTHN_CONNECT.

Уровень проверки подлинности и олицетворения по умолчанию для процессов, которые не вызывают CoInitializeSecurity , можно задать с помощью DCOMCNFG.

Если для dwCapabilities указано EOAC_DEFAULT, будут использоваться допустимые возможности CoInitializeSecurity . Если coInitializeSecurity не был вызван, EOAC_NONE будет использоваться для флага возможностей.

Если SetBlanket вызывается одновременно в двух потоках на одном прокси-сервере, будет применен только один набор изменений. Если SetBlanket и CRpcOptions::Set вызываются одновременно в двух потоках на одном прокси-сервере, могут применяться оба изменения или применяться только одно.

Сведения о безопасности не могут быть заданы в локальных интерфейсах, таких как интерфейс IClientSecurity . Однако, так как этот интерфейс поддерживается только локально, нет необходимости в безопасности. IUnknown и IMultiQI являются особыми случаями. Реализация расположения выполняет удаленные вызовы для поддержки этих интерфейсов. SetBlanket можно использовать для IUnknown. IMultiQI будет использовать параметры безопасности в IUnknown.

Чтобы изменить один параметр SetBlanket без необходимости работать с другими, можно указать константы по умолчанию для других параметров. Приложения могут изменять параметр (например, уровень проверки подлинности) и игнорировать другие параметры, включая службу проверки подлинности, задавая для всех остальных параметров константы по умолчанию.

Обратите внимание, что важно задать для всех неиспользуемых параметров константы по умолчанию, так как значение по умолчанию часто не очевидно. В частности, если для службы проверки подлинности задано значение по умолчанию, необходимо задать для сведений о проверке подлинности и имени субъекта значение по умолчанию. Причины этого двоякие: во-первых, тип сведений для проверки подлинности зависит от выбранной службы проверки подлинности DCOM. Во-вторых, так как DCOM требуется передать некоторые сложные сведения для проверки подлинности для определенных служб проверки подлинности, если для службы проверки подлинности задано значение по умолчанию, а для сведений для проверки подлинности — значение NULL, вы можете получить параметр безопасности, который не будет работать.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Профессиональная [классические приложения | Приложения UWP]
Минимальная версия сервера Windows 2000 Server [классические приложения | Приложения UWP]
Целевая платформа Windows
Header objidl.h (включая ObjIdl.h)

См. также раздел

CoQueryProxyBlanket

CoSetProxyBlanket

IClientSecurity