ZwOpenProcessTokenEx 函式 (ntifs.h)

ZwOpenProcessTokenEx 例程會開啟與進程相關聯的存取令牌。

語法

NTSYSAPI NTSTATUS ZwOpenProcessTokenEx(
  [in]  HANDLE      ProcessHandle,
  [in]  ACCESS_MASK DesiredAccess,
  [in]  ULONG       HandleAttributes,
  [out] PHANDLE     TokenHandle
);

參數

[in] ProcessHandle

要開啟其存取令牌的進程句柄。 句柄必須具有PROCESS_QUERY_INFORMATION存取權。 使用 NtCurrentProcess 宏,定義於 Ntddk.h 中,以指定目前的進程。

[in] DesiredAccess

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

[in] HandleAttributes

存取令牌句柄的屬性。 目前僅支援OBJ_KERNEL_HANDLE。 如果呼叫端未在系統進程內容中執行,則必須為此參數指定OBJ_KERNEL_HANDLE。

[out] TokenHandle

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

傳回值

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

傳回碼 Description
STATUS_ACCESS_DENIED ProcessHandle 沒有PROCESS_QUERY_INFORMATION存取權。
STATUS_INSUFFICIENT_RESOURCES 無法配置新的令牌句柄。
STATUS_INVALID_HANDLE ProcessHandle 不是有效的句柄。
STATUS_INVALID_PARAMETER 指定的 HandleAttributes 不包含OBJ_KERNEL_HANDLE。
STATUS_OBJECT_TYPE_MISMATCH ProcessHandle 不是進程句柄。
STATUS_PRIVILEGE_NOT_HELD 呼叫端沒有許可權 (SeSecurityPrivilege) 建立具有 DesiredAccess 參數中所指定存取權的令牌句柄。
STATUS_QUOTA_EXCEEDED 進程的記憶體配額不足以配置令牌句柄。
STATUS_UNSUCCESSFUL 無法建立令牌句柄。

備註

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

呼叫 ZwOpenProcessTokenEx 取得的任何句柄最終都必須藉由呼叫 ZwClose 來釋放。

在系統進程以外的進程內容中執行的驅動程式例程,必須為 ZwOpenProcessTokenExHandleAttributes 參數設定 OBJ_KERNEL_HANDLE 屬性。 這會限制 使用 ZwOpenProcessTokenEx 所傳回的句柄,以核心模式執行的進程。 否則,進程可以在其內容中執行驅動程式的句柄來存取。

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

注意

如果在使用者模式中呼叫 ZwOpenProcessTokenEx 函 式,您應該使用名稱 “NtOpenProcessTokenEx” 而不是 “ZwOpenProcessTokenEx”。

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

規格需求

需求
最低支援的用戶端 Windows XP
目標平台 Universal
標頭 ntifs.h (包含 Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 合規性規則 HwStorPortProhibitedDIS (storport) PowerIrpDDis (wdm)

另請參閱

ACCESS_MASK

ACL

PsDereferencePrimaryToken

使用 Nt 和 Zw 版本的原生系統服務例程

ZwClose

ZwOpenThreadTokenEx