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 结构的版本。 本主题介绍 RPC_SECURITY_QOS 结构的版本 1。 有关其他版本,请参阅RPC_SECURITY_QOS_V2RPC_SECURITY_QOS_V3、RPC_SECURITY_QOS_V4RPC_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 和更早的服务器版本上不受支持。
 
RPC_C_QOS_CAPABILITIES_SCHANNEL_FULL_AUTH_IDENTITY
如果设置,RPC 运行时使用 SChannel SSP 执行基于智能卡的身份验证,而不会显示加密服务提供程序 (CSP) 的 PIN 提示对话框。

在调用 RpcBindingSetAuthInfoEx 时, AuthIdentity 参数必须是其成员包含以下 SEC_WINNT_AUTH_IDENTITY 结构:

  • 用户 必须是指向 SCHANNEL_CRED 结构的指针
  • UserLength 必须为 0
  • 必须为 NULL
  • DomainLength 必须为 0
  • 密码 可以是证书 PIN 或 NULL。 如果 Password 为 PIN, 则 PasswordLength 必须为 PIN 的正确长度;如果 Password 为 NULL, 则 PasswordLength 必须为 0
如果 RPC_C_QOS_CAPABILITIES_SCHANNEL_FULL_AUTH_IDENTITY 标志用于 SChannel 以外的任何 SSP,或者如果 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 安全提供程序中,仅当与 ncalrpc 以外的协议序列一起使用时,RPC_C_AUTHN_WINNT才能执行此操作。 它还由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 安全提供程序中,仅当与 ncalrpc 以外的协议序列一起使用时,RPC_C_AUTHN_WINNT才能执行此操作。 它还由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 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 支持RPC_C_QOS_CAPABILITIES_LOCAL_MA_HINT提示。 仅当使用动态终结点和相互身份验证时,才会使用此提示。 此外, 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 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