rpcdce.h) (RPC_SECURITY_QOS_V3_A 结构

RPC_SECURITY_QOS_V3结构定义绑定句柄上的版本 3 安全服务质量设置。 有关 Windows 版本可用性,请参阅备注。

语法

typedef struct _RPC_SECURITY_QOS_V3_A {
  unsigned long Version;
  unsigned long Capabilities;
  unsigned long IdentityTracking;
  unsigned long ImpersonationType;
  unsigned long AdditionalSecurityInfoType;
  union {
    RPC_HTTP_TRANSPORT_CREDENTIALS_A *HttpCredentials;
  } u;
  void          *Sid;
} RPC_SECURITY_QOS_V3_A, *PRPC_SECURITY_QOS_V3_A;

成员

Version

正在使用的 RPC_SECURITY_QOS 结构的版本。 本主题介绍 RPC_SECURITY_QOS 结构的版本 3。 有关其他版本,请参阅 RPC_SECURITY_QOSRPC_SECURITY_QOS_V2RPC_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 依赖于 SSP 来指示已成功协商的安全选项;RPC 反过来会使 SSP 报告无法协商选项的任何调用失败。 但是,已知某些安全提供程序会报告选项的成功协商,即使选项未成功协商也是如此。 例如,NTLM 会报告出于向后兼容性原因成功协商相互身份验证,即使它不支持相互身份验证。 检查用于确定其与安全选项相关的行为的特定 SSP。
 
RPC_C_QOS_CAPABILITIES_MAKE_FULLSIC
目前尚未实现。
RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY
接受客户端的凭据,即使证书颁发机构 (CA) 不在服务器的受信任 CA 列表中。 此常量仅由 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 指示终结点映射器仅选取 由 ServerPrincNameSid 成员中指定的主体注册的终结点, (这些成员在 RPC_SECURITY_QOS_V3RPC_SECURITY_QOS_V4 中可用,并且 仅RPC_SECURITY_QOS_V5) 。 有关更多信息,请参见备注。
注意 在 Windows XP 和早期客户端版本上不受支持,在 Windows 2000 和更早的服务器版本上不受支持。
 

IdentityTracking

设置上下文跟踪模式。 应设置为下表中显示的值之一。

含义
RPC_C_QOS_IDENTITY_STATIC
安全上下文仅创建一次,在整个通信过程中永远不会修改,即使客户端对其进行更改也是如此。 如果未指定 RPC_SECURITY_QOS_V3 ,则这是默认行为。
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_IDENTIFY
服务器可以获取客户端的标识,并模拟客户端来执行访问控制列表 (ACL) 检查,但不能模拟客户端。 有关详细信息 ,请参阅模拟级别
注意 某些安全提供程序可能会将此模拟类型视为等效于RPC_C_IMP_LEVEL_IMPERSONATE。
 
RPC_C_IMP_LEVEL_IMPERSONATE
服务器可以在其本地系统上模拟客户端的安全上下文,但不能在远程系统上模拟客户端的安全上下文。
RPC_C_IMP_LEVEL_DELEGATE
服务器可以在代表客户端的同时模拟客户端的安全上下文。 服务器还可以在代表客户端执行操作时向其他服务器发出传出调用。 服务器可以使用其他计算机上的客户端安全上下文作为客户端访问本地和远程资源。

AdditionalSecurityInfoType

指定 u 联合中存在的附加凭据的类型。 支持以下常量:

支持的常量 含义
0
不会在 联合 中传递其他凭据。
RPC_C_AUTHN_INFO_TYPE_HTTP
u union 的 HttpCredentials 成员指向RPC_HTTP_TRANSPORT_CREDENTIALS结构。 仅当 ncacn_http协议序列时,才能使用此值。 任何其他协议序列返回RPC_S_INVALID_ARG。

u

u.HttpCredentials

要以 RPC_HTTP_TRANSPORT_CREDENTIALS 结构的形式传递给 RPC 的其他凭据集。 当 AdditionalSecurityInfoType 成员设置为 RPC_C_AUTHN_INFO_TYPE_HTTP 时使用。

Sid

指向 SID) (安全标识符。 SID 是 ServerPrincName 成员的替代项,只能指定一个。 如果安全提供程序是 SCHANNEL SSP,则 Sid 成员不能设置为非 NULL 。 某些协议序列在内部使用 Sid 实现安全性,有些协议序列使用 ServerPrincName。 例如, ncalrpc 在内部使用 Sid ,如果调用方同时知道 SID 和 ServerPrincName,则在某些情况下,如果传递 SID,则使用 ncalrpc 的调用可以更快地完成。 相比之下, ncacn_ncadg_ 协议序列在内部使用 ServerPrincName ,因此在提供 ServerPrincName 时可以更快地执行调用。

注解

以下列表定义了各种 Windows 操作系统上 QOS 版本的可用性:

  • 版本 1:Windows 2000 及更高版本。
  • 版本 2:Windows XP with Service Pack 1 (SP1) 及更高版本。
  • 版本 3:Windows Server 2003 及更高版本。
  • 版本 4:Windows Vista 及更高版本。
  • 版本 5:Windows 8 及更高版本。
Windows 版本也支持下层版本。 例如,Windows Server 2003 支持版本 3,但也支持版本 1 和 2。

客户端安全功能 RpcBindingInqAuthInfoExRpcBindingSetAuthInfo 使用 RPC_SECURITY_QOS 结构来查询或设置绑定句柄的服务质量。

RPC 支持 Windows XP 和早期客户端版本不支持的RPC_C_QOS_CAPABILITIES_LOCAL_MA_HINT提示 (,在 Windows 2000 和早期服务器版本) 上不受支持。 仅当使用动态终结点和相互身份验证时,才会使用此提示。 此外, ncadg_ 协议序列不支持它。 如果此标志用于 ncadg_ 协议序列,或者不使用相互身份验证,则从 RpcBindingSetAuthInfoEx 函数调用返回RPC_S_INVALID_ARG。 此标志旨在防止拒绝服务攻击。 使用此标志会强制 RPC 运行时仅请求由 ServerPrincNameSid 成员中指定的主体注册的终结点的终结点映射程序。 这可以防止本地计算机上的攻击者尝试欺骗 RPC 客户端连接到它在终结点映射器中注册的欺骗终结点。 请注意,由于攻击仅是本地 ((例如来自具有许多用户) 的终端服务器计算机),因此标志也仅适用于本地进行的 RPC 调用。

注意 某些安全提供程序(如 Kerberos)支持委派模拟类型。 在支持委派模拟类型的 Windows 版本中,如果客户端已请求委派,但安全提供程序无法提供委派,则调用将失败并PRC_S_SEC_PKG_ERROR,除非指定了RPC_C_QOS_CAPABILITIES_IGNORE_DELEGATE_FAILURE标志。
 

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 rpcdce.h (包括 Rpc.h)

另请参阅

RPC_HTTP_TRANSPORT_CREDENTIALS

RPC_SECURITY_QOS

RPC_SECURITY_QOS_V2

RPC_SECURITY_QOS_V4

RPC_SECURITY_QOS_V5

RpcBindingInqAuthInfoEx

RpcBindingSetAuthInfoEx