DuplicateTokenEx 函式 (securitybaseapi.h)
DuplicateTokenEx 函式會建立複製現有令牌的新 存取令牌。 這個函式可以建立 主要令牌 或 模擬令牌。
BOOL DuplicateTokenEx(
[in] HANDLE hExistingToken,
[in] DWORD dwDesiredAccess,
[in, optional] LPSECURITY_ATTRIBUTES lpTokenAttributes,
[in] SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
[in] TOKEN_TYPE TokenType,
[out] PHANDLE phNewToken
);
[in] hExistingToken
以TOKEN_DUPLICATE存取權開啟之存取令牌的句柄。
[in] dwDesiredAccess
指定新令牌的要求訪問許可權。 DuplicateTokenEx 函式會將要求的訪問許可權與現有令牌的 選擇性訪問控制清單 (DACL) 進行比較,以判斷要授與或拒絕哪些許可權。 若要要求與現有令牌相同的訪問許可權,請指定零。 若要要求所有對呼叫者有效的訪問許可權,請指定MAXIMUM_ALLOWED。
如需存取權杖的存取權限清單,請參閱 Access-Token 物件的存取權限。
[in, optional] lpTokenAttributes
若要在新令牌的安全性描述元中設定擁有者,呼叫端的進程令牌必須具有 SE_RESTORE_NAME 許可權集。
[in] ImpersonationLevel
指定來自 SECURITY_IMPERSONATION_LEVEL 列舉的值,這個值表示新令牌的模擬層級。
[in] TokenType
從 TOKEN_TYPE 列舉指定下列其中一個值。
價值 | 意義 |
---|---|
|
新的令牌是 主要令牌,您可以在 createProcessAsUser 函式中使用。 |
|
新的令牌是模擬令牌。 |
[out] phNewToken
接收新令牌之 HANDLE 變數的指標。
當您完成使用新的令牌時,請呼叫 CloseHandle 函式以關閉令牌句柄。
如果函式成功,函式會傳回非零值。
如果函式失敗,則會傳回零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
以下是使用 DuplicateTokenEx 建立 主要令牌的典型案例。 伺服器應用程式會建立線程,呼叫其中一個模擬函式,例如 ImpersonateNamedPipeClient,以模擬用戶端。 模擬線程接著會呼叫 OpenThreadToken 函式以取得自己的令牌,這是具有用戶端安全性內容的 模擬 令牌。 線程會在呼叫 DuplicateTokenEx中指定這個模擬令牌,並指定 TokenPrimary 旗標。 DuplicateTokenEx 函式會建立具有用戶端安全性內容的 主要令牌。
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
支援的最低伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平臺 | 窗戶 |
標頭 | securitybaseapi.h (包括 Windows.h) |
連結庫 | Advapi32.lib |
DLL | Advapi32.dll |