共用方式為


ntOpenThreadToken 函式 (ntifs.h)

NtOpenThreadToken 例程會開啟與線程相關聯的存取令牌,並傳回可用來存取該令牌的句柄。

語法

__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenThreadToken(
  [in]  HANDLE      ThreadHandle,
  [in]  ACCESS_MASK DesiredAccess,
  [in]  BOOLEAN     OpenAsSelf,
  [out] PHANDLE     TokenHandle
);

參數

[in] ThreadHandle

要開啟其存取令牌的線程句柄。 句柄必須具有THREAD_QUERY_INFORMATION存取權。 使用 NtCurrentThread 宏來指定目前的線程。

[in] DesiredAccess

ACCESS_MASK 結構,指定存取令牌的要求存取類型。 這些要求的存取類型會與令牌的任意訪問控制清單進行比較, (DACL) ,以判斷授與或拒絕哪些訪問許可權。

[in] OpenAsSelf

布爾值,指定是否要針對呼叫 NtOpenThreadToken 之線程的安全性內容,或針對呼叫線程之進程的安全性內容進行存取檢查。

如果此參數為 FALSE,則會使用呼叫線程的安全性內容來執行存取檢查。 如果線程正在模擬用戶端,此安全性內容可以是客戶端進程的安全性內容。 如果此參數為 TRUE,則會使用呼叫線程之進程的安全性內容來進行存取檢查。

[out] TokenHandle

呼叫端配置的變數指標,該變數會接收新開啟之存取令牌的句柄。

傳回值

NtOpenThreadToken 會傳回STATUS_SUCCESS或適當的錯誤狀態。 可能的錯誤狀態代碼包括:

傳回碼 Description
STATUS_ACCESS_DENIED
ThreadHandle 沒有THREAD_QUERY_INFORMATION存取權。
STATUS_CANT_OPEN_ANONYMOUS 用戶端要求 SecurityAnonymous 模擬層級。 不過,無法開啟匿名令牌。 如需詳細資訊,請參閱 SECURITY_IMPERSONATION_LEVEL
STATUS_INVALID_HANDLE ThreadHandle 不是有效的句柄。
STATUS_NO_TOKEN 嘗試開啟與目前未模擬用戶端之線程相關聯的令牌。
STATUS_OBJECT_TYPE_MISMATCH ThreadHandle 不是線程句柄。

備註

NtOpenThreadToken 會開啟與線程相關聯的存取令牌,並傳回該令牌的句柄。

當客戶端進程已指定 SECURITY_IMPERSONATION_LEVEL 列舉類型的 SecurityIdentification 模擬層級時,OpenAsSelf 參數可讓伺服器進程開啟客戶端進程的存取令牌。 如果沒有此參數,呼叫進程就無法使用用戶端的安全性內容開啟用戶端的存取令牌,因為無法使用 SecurityIdentification 模擬層級開啟執行層級物件。

呼叫 NtOpenThreadToken 取得的任何句柄最終都必須透過呼叫 NtClose 來釋放。

如需安全性和訪問控制的詳細資訊,請參閱 適用於驅動程序開發人員的 Windows 安全性模型 ,以及 Windows SDK 中這些主題的相關文件。

針對來自內核模式驅動程式的呼叫,Windows 原生系統服務例程的 NtXxxZwXxx 版本會以處理和解譯輸入參數的方式,以不同的方式運作。 如需 例程 NtXxxZwXxx 版本之間關聯性的詳細資訊,請參閱 使用原生系統服務例程的 Nt 和 Zw 版本

規格需求

需求
最低支援的用戶端 Windows XP
標頭 ntifs.h
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe

另請參閱

ACCESS_MASK

ACL

NtOpenThreadTokenEx

PsDereferencePrimaryToken

SECURITY_IMPERSONATION_LEVEL

ZwClose

ZwOpenProcessTokenEx