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访问权限。 使用在 Ntddk.h 中定义的 NtCurrentProcess 宏指定当前进程。
[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释放。
在系统进程以外的进程上下文中运行的驱动程序例程必须为 ZwOpenProcessTokenEx的 HandleAttributes 参数设置OBJ_KERNEL_HANDLE属性。 这会将 ZwOpenProcessTokenEx 返回的句柄 限制为在内核模式下运行的进程。 否则,该句柄可由运行驱动程序的上下文的进程访问。
有关安全和访问控制的详细信息,请参阅适用于驱动程序开发人员
注意
如果在用户模式下调用 ZwOpenProcessTokenEx 函数,则应使用名称“NtOpenProcessTokenEx”而不是“ZwOpenProcessTokenEx”。
对于内核模式驱动程序的调用,NtXxx 和 ZwXxx 版本的 Windows 本机系统服务例程的行为方式可能以不同的方式处理和解释输入参数。 有关 NtXxx 与 ZwXxx 例程之间的关系的详细信息,请参阅 使用 Nt 和 Zw 版本的本机系统服务例程。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP |
目标平台 | 普遍 |
标头 | ntifs.h (include Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDIS(storport),PowerIrpDDis(wdm) |