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,則允許要求的模擬:
- 呼叫端具有 SeImpersonatePrivilege 許可權。
- 進程 (或呼叫端登入會話中的另一個進程) 會透過 LogonUser 或 LsaLogonUser 函式,使用明確認證來建立權杖。
- 已驗證的身分識別與呼叫者相同。
這很重要
權杖必須具有 SecurityImpersonation 或更高的模擬層級,模擬才能成功。 具有 SecurityIdentification 或 SecurityAnonymous 層級的權杖無法用於模擬,即使呼叫端具有 SeImpersonatePrivilege 也一樣。 SecurityIdentification 權杖允許身分驗證和 ACL 檢查,但不允許模擬。
模擬層級需求
行為會根據權杖的模擬層級而有所不同:
- SecurityAnonymous:伺服器無法取得客戶端身分訊息,無法模擬客戶端。
- SecurityIdentification:伺服器可以取得客戶端的身份並進行存取驗證,但不能模擬客戶端。 這是許多案例的預設層級。
- SecurityImpersonation:伺服器可以在本機系統上模擬客戶端的安全上下文。 這是 ImpersonateLoggedOnUser 成功所需的最低層級。
- SecurityDelegation:伺服器可以在遠端系統上以及本機上模擬用戶端。
Windows XP SP1 及更早版本: 不支援 SeImpersonatePrivilege 權限。
如需模擬的詳細資訊,請參閱 用戶端模擬。
需求
| Requirement | 價值觀 |
|---|---|
| 最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
| 支援的最低伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
| 目標平臺 | 窗戶 |
| Header | securitybaseapi.h (包括 Windows.h) |
| Library | Advapi32.lib |
| DLL | Advapi32.dll |