RpcGetAuthorizationContextForClient 函数 (rpcasync.h)

RpcGetAuthorizationContextForClient 函数返回 RPC 客户端的 Authz 上下文,该上下文可与 Authz 函数一起使用以进行高性能身份验证。 仅支持 ncalrpcncacn_* 协议序列。

语法

RPC_STATUS RpcGetAuthorizationContextForClient(
  [in, optional] RPC_BINDING_HANDLE ClientBinding,
  [in]           BOOL               ImpersonateOnReturn,
  [in]           PVOID              Reserved1,
  [in, optional] PLARGE_INTEGER     pExpirationTime,
  [in]           LUID               Reserved2,
  [in]           DWORD              Reserved3,
  [in]           PVOID              Reserved4,
  [out]          PVOID              *pAuthzClientContext
);

参数

[in, optional] ClientBinding

服务器上的绑定句柄,表示与客户端的绑定。 服务器模拟此句柄指示的客户端。 如果指定值零,服务器将模拟由此服务器线程提供服务的客户端。

[in] ImpersonateOnReturn

指示函数在返回时模拟客户端,然后返回 AUTHZ_CLIENT_CONTEXT_HANDLE 结构。 将此参数设置为非零以模拟客户端。 请参阅“备注”。

[in] Reserved1

保留。 必须为 Null。

[in, optional] pExpirationTime

指向令牌过期日期和时间的指针。 如果未传递任何值,则令牌永不过期。 当前未强制实施过期时间。

[in] Reserved2

保留。 必须是每个成员设置为零的 LUID 结构。

[in] Reserved3

保留。 必须为零。

[in] Reserved4

保留。 必须为 Null。

[out] pAuthzClientContext

指向可直接传递给 Authz 函数 的AUTHZ_CLIENT_CONTEXT_HANDLE 结构的指针。 如果函数失败,则此参数的内容未定义。

返回值

含义
RPC_S_OK
调用成功。
RERROR_INVALID_PARAMETER
保留参数不同于其规定值。
RPC_S_NO_CONTEXT_AVAILABLE
RPC 客户端未成功进行身份验证。
 

失败返回RPC_S_* 错误代码或 Windows 错误代码。 扩展的错误信息可通过标准 RPC 或 Windows 错误代码检索机制获得。 有关有效错误代码的列表,请参阅 RPC 返回值

注解

RpcGetAuthorizationContextForClient 函数可以在与 RpcImpersonateClient 函数相同的上下文中调用。 模拟的所有函数检查,以确定调用方是否具有 SeImpersonatePrivilege 特权。 如果调用方具有 SeImpersonatePrivilege,或者如果经过身份验证的标识与调用方相同,则允许请求的模拟。 否则,模拟仅在“标识”级别成功。

注意 在 Windows XP service Pack 2 (SP2) 之前,不支持 SeImpersonatePrivilege 特权。

rpcGetAuthorizationContextForClient 函数仅支持 ncalrpc 和 ncacn_* 协议序列,并且不支持仅实现传输安全性的命名管道。

RpcGetAuthorizationContextForClient 函数是线程安全的,可以从多个线程调用。 pAuthzClientContext 中返回的上下文独立于函数调用,可以在其完成之后使用。 调用方负责通过调用 RpcFreeAuthorizationContext 函数来释放上下文。

与以前的模拟或访问方法相比,使用 RpcGetAuthorizationContextForClient 函数观察到的性能改进检查或还原自,具体取决于以下因素:

  • 为给定客户端标识调用函数的次数。
  • 对函数调用生效的协议序列和标识跟踪。
针对同一客户端标识对 RpcGetAuthorizationContextForClient 函数的后续调用成本极低。 这种效率是通过缓存先前查询的结果以及尽可能从缓存返回的响应来实现的。

通过具有静态标识跟踪的 ncalrpc 调用执行 RpcGetAuthorizationContextForClient 函数的速度比通过具有动态标识跟踪的 ncalrpc 调用要快。 对于给定的协议序列,通过 ncacn_* 执行的调用的速度大致相同,无论标识跟踪是静态的还是动态的。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 rpcasync.h (包括 Rpc.h)
Library Rpcrt4.lib
DLL Rpcrt4.dll

另请参阅

客户端/服务器访问控制函数

LUID

RPC 返回值

RpcFreeAuthorizationContext

RpcImpersonateClient