服务质量 (RPC)

客户端程序可以使用 RpcBindingSetAuthInfoEx 函数而不是 RpcBindingSetAuthInfo 函数来创建经过身份验证的绑定。 如果这样做,则会将指向 RPC_SECURITY_QOS 结构的指针作为 RpcBindingSetAuthInfoEx 的最终参数传递。 此结构包含有关服务质量的信息。 客户端程序还可以指定标识跟踪并选择模拟类型。

使用 RPC_SECURITY_QOS 结构的 Capabilities 成员设置对客户端/服务器应用程序的哪些部分进行身份验证。 如果选择RPC_C_QOS_CAPABILITIES_DEFAULT,则 RPC 运行时库将根据 SSP 的默认值对客户端或服务器进行身份验证。 默认情况下,Kerberos 协议 SSP 对客户端和服务器进行身份验证。 Microsoft 提供的所有其他 SSP 的默认设置是向服务器对客户端进行身份验证,但不是向客户端对服务器进行身份验证。

如果客户端和服务器应始终相互进行身份验证,请将 RPC_SECURITY_QOS 结构的 Capabilities 成员设置为 RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH。 某些安全提供程序可能不支持相互身份验证。 如果为此类安全提供程序指定了RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH,则进行远程过程调用时将返回错误。 使用 SCHANNEL SSP 时,还可以将 Capabilities 成员设置为 RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY。 此常量指定即使颁发客户端身份验证证书的证书颁发机构不在 SSP 的根证书存储中,SSP 也应验证远程过程调用。 如果 SSP 无法识别证书颁发机构,则默认拒绝证书。 证书颁发机构是颁发身份验证证书的独立公司或组织,例如 VeriSign。

应用程序还可以设置 RPC 运行时库使用的标识跟踪。 程序通常使用 静态标识跟踪。 使用静态跟踪时,客户端在调用 RpcBindingSetAuthInfo 函数时设置凭据。 然后,无论调用线程或调用进程的标识发生更改,RPC 运行时库都会将这些凭据用于绑定上的所有 RPC 调用。 应用程序还可以选择 动态标识跟踪。 动态标识跟踪指示 RPC 运行时库在每次调用时使用调用线程的凭据,而不是绑定句柄。 默认标识跟踪是静态的。

如果客户端的标识不会更改,静态标识跟踪可以具有更好的性能特征,并且可以节省 RPC 运行时间,避免每次检查调用线程上的标识是否与提供给安全系统的标识相同。 如果调用线程的标识可能在调用之间发生更改,并且服务器需要识别这些更改,则最好指定动态标识跟踪 — RPC 运行时以安静且高效的方式为你跟踪标识,如果标识发生更改,则代表你管理该更改。

注意

对于 ncalrpc 调用,静态和动态标识跟踪具有不同的性能特征,并且根据具体情况,两者可能更快。

 

作为 QOS 规范的一部分,客户端程序还可以设置服务器程序可以代表其执行的模拟类型。 有关详细信息,请参阅 客户端模拟

RPC_SECURITY_QOS 结构的版本号字段应始终设置为 RPC_C_SECURITY_QOS_VERSION。