impersonateLoggedOnUser 函数 (securitybaseapi.h)
ImpersonateLoggedOnUser 函数允许调用线程模拟已登录用户的安全上下文。 用户由令牌句柄表示。
语法
BOOL ImpersonateLoggedOnUser(
[in] HANDLE hToken
);
参数
[in] hToken
表示已登录用户的主访问令牌或模拟 访问令牌 的句柄。 这可以是通过调用 LogonUser、 CreateRestrictedToken、 DuplicateToken、 DuplicateTokenEx、 OpenProcessToken 或 OpenThreadToken 函数返回的令牌句柄。 如果 hToken 是 主令牌的句柄,则令牌必须具有 TOKEN_QUERY 和 TOKEN_DUPLICATE 访问权限。 如果 hToken 是 模拟令牌的句柄,则令牌必须具有 TOKEN_QUERY 和 TOKEN_IMPERSONATE 访问权限。
返回值
如果该函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
注解
模拟持续到线程退出或调用 RevertToSelf。
调用线程不需要具有任何特定 特权 来调用 ImpersonateLoggedOnUser。
如果对 ImpersonateLoggedOnUser 的 调用失败,则不会模拟客户端连接,并且客户端请求是在进程的安全上下文中进行的。 如果进程以高特权帐户(如 LocalSystem)或管理组的成员身份运行,则用户可能能够执行本来不允许的操作。 因此,请务必始终检查调用的返回值,如果失败,则引发错误;不要继续执行客户端请求。
所有模拟函数(包括 ImpersonateLoggedOnUser) 都允许请求的模拟(如果以下情况之一为 true):
- 请求的令牌模拟级别小于 SecurityImpersonation,例如 SecurityIdentification 或 SecurityAnonymous。
- 调用方具有 SeImpersonatePrivilege 特权。
- 调用方登录会话中的进程 (或另一个进程) 通过 LogonUser 或 LsaLogonUser 函数使用显式凭据创建令牌。
- 经过身份验证的标识与调用方相同。
有关模拟的详细信息,请参阅 客户端模拟。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | securitybaseapi.h (包括 Windows.h) |
Library | Advapi32.lib |
DLL | Advapi32.dll |