共用方式為


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或適當的錯誤狀態。 可能的錯誤狀態代碼包括下列專案:

傳回碼 描述
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來釋放。

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

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

注意

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

對於內核模式驅動程式的呼叫,NtXxxZwXxx 版本的 Windows 原生系統服務例程,在處理和解譯輸入參數的方式上可能會有不同的行為。 如需 nt NtXxxZwXxx 例程之間關聯性的詳細資訊,請參閱 使用 Nt 和 Zw 版本的原生系統服務例程

要求

要求 價值
最低支援的用戶端 Windows XP
目標平臺 普遍
標頭 ntifs.h (include Ntifs.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 合規性規則 HwStorPortProhibitedDIs(storport)PowerIrpDDis(wdm)

另請參閱

ACCESS_MASK

ACL

PsDereferencePrimaryToken

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

ZwClose

ZwOpenThreadTokenEx