структура RPC_SECURITY_QOS (rpcdce.h)

Структура RPC_SECURITY_QOS определяет параметры качества обслуживания безопасности для дескриптора привязки. Сведения о доступности версий в выпусках Windows см. в разделе Примечания.

Синтаксис

typedef struct _RPC_SECURITY_QOS {
  unsigned long Version;
  unsigned long Capabilities;
  unsigned long IdentityTracking;
  unsigned long ImpersonationType;
} RPC_SECURITY_QOS, *PRPC_SECURITY_QOS;

Члены

Version

Версия используемой структуры RPC_SECURITY_QOS . В этом разделе описана версия 1 структуры RPC_SECURITY_QOS . Другие версии см. в разделе RPC_SECURITY_QOS_V2, RPC_SECURITY_QOS_V3, RPC_SECURITY_QOS_V4 и RPC_SECURITY_QOS_V5 .

Capabilities

Службы безопасности, предоставляемые приложению. Возможности — это набор флагов, которые можно объединить с помощью побитового оператора OR.

Значение Значение
RPC_C_QOS_CAPABILITIES_DEFAULT
Используется, когда не требуются возможности конкретного поставщика.
RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH
Если указать этот флаг, во время выполнения RPC запрашивается взаимная проверка подлинности у поставщика безопасности. Некоторые поставщики безопасности не поддерживают взаимную проверку подлинности. Если поставщик безопасности не поддерживает взаимную проверку подлинности или не удается установить удостоверение сервера, удаленный вызов процедуры к такому серверу завершается ошибкой RPC_S_SEC_PKG_ERROR.
Примечание RPC использует поставщик общих служб, чтобы указать, какие параметры безопасности были успешно согласованы; RPC, в свою очередь, завершается сбоем при любом вызове, для которого поставщик служб безопасности (SSP) сообщает, что ему не удалось согласовать вариант. Однако известно, что некоторые поставщики безопасности сообщают об успешном согласовании варианта, даже если этот вариант не был успешно согласован. Например, NTLM сообщит об успешном согласовании взаимной проверки подлинности по соображениям обратной совместимости, даже если не поддерживает взаимную проверку подлинности. Обратитесь к конкретному поставщику общих служб, который используется, чтобы определить его поведение в отношении параметров безопасности.
 
RPC_C_QOS_CAPABILITIES_MAKE_FULLSIC
В настоящий момент не реализовано.
RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY
Принимает учетные данные клиента, даже если центр сертификации (ЦС) отсутствует в списке доверенных ЦС сервера. Эта константа используется только поставщиком SCHANNEL SSP.
RPC_C_QOS_CAPABILITIES_IGNORE_DELEGATE_FAILURE
Если этот флаг указан, среда выполнения RPC на клиенте игнорирует ошибку, чтобы установить контекст безопасности, поддерживающий делегирование. Как правило, если клиент запрашивает делегирование, а система безопасности не может установить контекст безопасности, поддерживающий делегирование, возвращается RPC_S_SEC_PKG_ERROR ошибок; Если этот флаг указан, ошибка не возвращается.
Примечание Не поддерживается в Windows XP и более ранних клиентских выпусках, не поддерживается в Windows 2000 и более ранних версиях сервера.
 
RPC_C_QOS_CAPABILITIES_LOCAL_MA_HINT
Этот флаг указывает RPC, что сервер является локальным для компьютера, выполняющего вызов RPC. В этом случае RPC предписывает сопоставителям конечных точек выбирать только конечные точки, зарегистрированные субъектом, указанным в элементах ServerPrincName или Sid (эти элементы доступны только в RPC_SECURITY_QOS_V3, RPC_SECURITY_QOS_V4 и RPC_SECURITY_QOS_V5 ). Дополнительные сведения см. в разделе "Примечания".
Примечание Не поддерживается в Windows XP и более ранних клиентских выпусках, не поддерживается в Windows 2000 и более ранних версиях сервера.
 
RPC_C_QOS_CAPABILITIES_SCHANNEL_FULL_AUTH_IDENTITY
Если этот параметр задан, среда выполнения RPC использует SChannel SSP для выполнения проверки подлинности на основе смарт-карт без отображения диалогового окна запроса ПИН-кода поставщиком служб шифрования (CSP).

В вызове RpcBindingSetAuthInfoEx параметр AuthIdentity должен быть SEC_WINNT_AUTH_IDENTITY структурой, элементы которой содержат следующие элементы:

  • Пользователь должен быть указателем на структуру SCHANNEL_CRED
  • Значение UserLength должно иметь значение 0
  • Домен должен иметь значение NULL
  • Значение DomainLength должно иметь значение 0
  • Пароль может быть ПИН-код сертификата или NULL. Если пароль является ПИН-кодом, passwordLength должен иметь правильную длину ДЛЯ ПИН-кода, а если пароль имеет значение NULL, PasswordLength должен иметь значение 0.
Если флаг RPC_C_QOS_CAPABILITIES_SCHANNEL_FULL_AUTH_IDENTITY используется для любого поставщика общих служб, отличных от SChannel, или если члены SEC_WINNT_AUTH_IDENTITY не соответствуют описанному выше, RpcBindingSetAuthInfoEx вернет RPC_S_INVALID_ARG.

IdentityTracking

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

Значение Значение
RPC_C_QOS_IDENTITY_STATIC
Контекст безопасности создается только один раз и никогда не пересматривается в течение всего взаимодействия, даже если клиент изменяет его. Это поведение по умолчанию, если RPC_SECURITY_QOS не указан.
RPC_C_QOS_IDENTITY_DYNAMIC
Контекст пересматривается при каждом изменении ModifiedId в маркере клиента. Все протоколы используют ModifiedId (см. примечание).

Windows 2000: Все удаленные протоколы (все протоколы, отличные от ncalrpc) используют authenticationID, также известный как LogonId, для отслеживания изменений в удостоверении клиента. Протокол ncalrpc использует ModifiedId.

ImpersonationType

Уровень, на котором серверный процесс может олицетворить клиента.

Значение Значение
RPC_C_IMP_LEVEL_DEFAULT
Использует уровень олицетворения по умолчанию.
RPC_C_IMP_LEVEL_ANONYMOUS
Клиент не предоставляет серверу идентификационную информацию. Сервер не может олицетворять клиента или идентифицировать клиента. Многие серверы отклоняют вызовы с этим типом олицетворения.
Примечание Некоторые поставщики безопасности могут рассматривать этот тип олицетворения как эквивалентный RPC_C_IMP_LEVEL_IMPERSONATE. От поставщиков безопасности Windows это делается RPC_C_AUTHN_WINNT только при использовании с последовательности протоколов, отличных от ncalrpc. Это также делается RPC_C_AUTHN_GSS_NEGOTIATE, RPC_C_AUTHN_GSS_SCHANNEL и RPC_C_AUTHN_GSS_KERBEROS.
 
RPC_C_IMP_LEVEL_IDENTIFY
Сервер может получить удостоверение клиента и олицетворить клиента для выполнения проверок списка контроль доступа ( ACL), но не может олицетворить клиента. Дополнительные сведения см. в разделе Уровни олицетворения .
Примечание Некоторые поставщики безопасности могут рассматривать этот тип олицетворения как эквивалентный RPC_C_IMP_LEVEL_IMPERSONATE. От поставщиков безопасности Windows это делается RPC_C_AUTHN_WINNT только при использовании с последовательности протоколов, отличных от ncalrpc. Это также делается RPC_C_AUTHN_GSS_NEGOTIATE, RPC_C_AUTHN_GSS_SCHANNEL и RPC_C_AUTHN_GSS_KERBEROS.
 
RPC_C_IMP_LEVEL_IMPERSONATE
Сервер может олицетворять контекст безопасности клиента в локальной системе, но не в удаленных системах.
RPC_C_IMP_LEVEL_DELEGATE
Сервер может олицетворять контекст безопасности клиента, пока действует от его лица. Сервер также может выполнять исходящие вызовы к другим серверам, действуя от имени клиента. Сервер может использовать контекст безопасности клиента на других компьютерах для доступа к локальным и удаленным ресурсам в качестве клиента.

Комментарии

В следующем списке определяется доступность версий QOS в различных операционных системах Windows:

  • Версия 1: Windows 2000 и более поздние версии.
  • Версия 2: Windows XP с пакетом обновления 1 (SP1) и более поздних версий.
  • Версия 3: Windows Server 2003 и более поздние версии.
  • Версия 4: Windows Vista и более поздних версий.
  • Версия 5: Windows 8 и более поздних версий.
Выпуски Windows также поддерживают более ранние версии. Например, Windows Server 2003 поддерживает версию 3, но также поддерживает версии 1 и 2.

Функции безопасности на стороне клиента RpcBindingInqAuthInfoEx и RpcBindingSetAuthInfo используют структуру RPC_SECURITY_QOS , чтобы узнать о качестве безопасности обслуживания для дескриптора привязки или задать его.

RPC поддерживает указание RPC_C_QOS_CAPABILITIES_LOCAL_MA_HINT. Это указание используется только при использовании динамических конечных точек и взаимной проверки подлинности. Кроме того, он не поддерживается для последовательностей протоколов ncadg_ . Если этот флаг используется для последовательности протокола ncadg_ или без использования взаимной проверки подлинности, RPC_S_INVALID_ARG возвращается из вызова функции RpcBindingSetAuthInfoEx . Этот флаг предназначен для предотвращения атаки типа "отказ в обслуживании". Использование этого флага заставляет среду выполнения RPC запрашивать у сопоставителя конечных точек только конечные точки, зарегистрированные субъектом, указанным в элементах ServerPrincName или Sid . Это предотвращает попытку злоумышленника на локальном компьютере обмануть клиент RPC для подключения к подделаной конечной точке, зарегистрированной в средстве сопоставления конечных точек. Обратите внимание, что так как атака является локальной (например, с компьютера сервера терминалов с большим количеством пользователей), флаг также работает только для вызовов RPC, выполненных локально.

Примечание Некоторые поставщики безопасности, например Kerberos, поддерживают тип олицетворения делегирования. В выпусках Windows, поддерживающих тип олицетворения делегирования, если клиент запросил делегирование, но поставщик безопасности не может предоставить его, вызов завершается сбоем с PRC_S_SEC_PKG_ERROR, если не указан флаг RPC_C_QOS_CAPABILITIES_IGNORE_DELEGATE_FAILURE.
 

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Верхняя часть rpcdce.h (включая Rpc.h)

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

RPC_SECURITY_QOS_V2

RPC_SECURITY_QOS_V3

RPC_SECURITY_QOS_V4

RPC_SECURITY_QOS_V5

RpcBindingInqAuthInfoEx

RpcBindingSetAuthInfoEx