impersonateLoggedOnUser 函数 (securitybaseapi.h)

ImpersonateLoggedOnUser 函数允许调用线程模拟已登录用户的安全上下文。 用户由令牌句柄表示。

语法

BOOL ImpersonateLoggedOnUser(
  [in] HANDLE hToken
);

参数

[in] hToken

表示已登录用户的主访问令牌或模拟 访问令牌 的句柄。 这可以是通过调用 LogonUserCreateRestrictedTokenDuplicateTokenDuplicateTokenExOpenProcessTokenOpenThreadToken 函数返回的令牌句柄。 如果 hToken主令牌的句柄,则令牌必须具有 TOKEN_QUERYTOKEN_DUPLICATE 访问权限。 如果 hToken模拟令牌的句柄,则令牌必须具有 TOKEN_QUERYTOKEN_IMPERSONATE 访问权限。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

模拟持续到线程退出或调用 RevertToSelf

调用线程不需要具有任何特定 特权 来调用 ImpersonateLoggedOnUser

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

所有模拟函数(包括 ImpersonateLoggedOnUser) 都允许请求的模拟(如果以下情况之一为 true):

  • 请求的令牌模拟级别小于 SecurityImpersonation,例如 SecurityIdentificationSecurityAnonymous
  • 调用方具有 SeImpersonatePrivilege 特权。
  • 调用方登录会话中的进程 (或另一个进程) 通过 LogonUserLsaLogonUser 函数使用显式凭据创建令牌。
  • 经过身份验证的标识与调用方相同。
具有 SP1 及更早版本的 Windows XP: 不支持 SeImpersonatePrivilege 特权。

有关模拟的详细信息,请参阅 客户端模拟

要求

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

另请参阅

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

客户端/服务器访问控制概述

CreateProcessAsUser

CreateRestrictedToken

DuplicateToken

DuplicateTokenEx

LogonUser

OpenProcessToken

OpenThreadToken

RevertToSelf