RpcImpersonateClient 函数 (rpcdce.h)

正在处理客户端远程过程调用的服务器线程可以调用 RpcImpersonateClient 函数来模拟活动客户端。

语法

RPC_STATUS RpcImpersonateClient(
  RPC_BINDING_HANDLE BindingHandle
);

parameters

BindingHandle

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

返回值

含义
RPC_S_OK
调用成功。
RPC_S_NO_CALL_ACTIVE
此服务器线程上没有任何客户端处于活动状态。
RPC_S_CANNOT_SUPPORT
操作系统、传输或此安全子系统都不支持 函数。
RPC_S_INVALID_BINDING
绑定句柄无效。
RPC_S_WRONG_KIND_OF_BINDING
这是操作的错误绑定类型。
RPC_S_NO_CONTEXT_AVAILABLE
服务器没有模拟客户端的权限。
 
注意 有关有效错误代码的列表,请参阅 RPC 返回值
 

注解

在多线程应用程序中,如果对 RpcImpersonateClient 的调用具有另一个客户端线程的句柄,则必须使用该线程的句柄调用 RpcRevertToSelfEx 以结束模拟。

模拟的所有函数检查确定此函数 (RPC 服务器) 的调用方是否具有 SeImpersonatePrivilege 特权。 如果调用方具有 SeImpersonatePrivilege,或者如果经过身份验证的标识与此函数的调用方标识相同,则允许请求的模拟。 否则,模拟仅在“标识”级别成功。

Windows XP/2000/NT: 在具有 Service Pack 2 的 Windows XP (SP2) 之前,不支持 SeImpersonatePrivilege 特权。

安全备注

如果由于任何原因调用 RpcImpersonateClient 失败,则不会模拟客户端连接,并且客户端请求是在进程的安全上下文中发出的。 如果进程以高特权帐户(例如 LocalSystem)或管理组的成员身份运行,则用户可能能够执行否则不允许的操作。 因此,请务必始终检查调用的返回值,如果调用失败,则引发错误;不要继续执行客户端请求。

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 rpcdce.h
Library Rpcrt4.lib
DLL Rpcrt4.dll

请参阅

客户端模拟

RpcRevertToSelf