NtOpenProcessToken 函数 (ntifs.h)
NtOpenProcessToken 例程打开与进程关联的访问令牌,并返回可用于访问该令牌的句柄。
语法
__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenProcessToken(
[in] HANDLE ProcessHandle,
[in] ACCESS_MASK DesiredAccess,
[out] PHANDLE TokenHandle
);
参数
[in] ProcessHandle
要打开其访问令牌的进程句柄。 句柄必须具有PROCESS_QUERY_INFORMATION访问权限。 使用 Ntddk.h 中定义的 NtCurrentProcess 宏指定当前进程。
[in] DesiredAccess
ACCESS_MASK 结构,指定访问令牌的请求访问类型。 这些请求的访问类型与令牌的任意访问控制列表 (DACL) 进行比较,以确定授予或拒绝了哪些访问。
[out] TokenHandle
指向调用方分配的变量的指针,该变量接收新打开的访问令牌的句柄。
返回值
NtOpenProcessToken 返回STATUS_SUCCESS或适当的错误状态。 可能的错误状态代码包括:
返回代码 | 说明 |
---|---|
STATUS_ACCESS_DENIED | ProcessHandle 没有PROCESS_QUERY_INFORMATION访问权限。 |
STATUS_INSUFFICIENT_RESOURCES | 无法分配新的令牌句柄。 |
STATUS_INVALID_HANDLE | ProcessHandle 不是有效的句柄。 |
STATUS_OBJECT_TYPE_MISMATCH | ProcessHandle 不是进程句柄。 |
STATUS_PRIVILEGE_NOT_HELD | 调用方没有使用 DesiredAccess 参数中指定的访问权限创建令牌句柄所需的权限 (SeSecurityPrivilege) 。 |
STATUS_QUOTA_EXCEEDED | 进程的内存配额不足以分配令牌句柄。 |
STATUS_UNSUCCESSFUL | 无法创建令牌句柄。 |
注解
若要指定访问令牌句柄的属性,请改用 NtOpenProcessTokenEx 。
该句柄可由运行驱动程序的上下文中的进程访问。
通过调用 NtOpenProcessToken 获取的任何句柄最终都必须通过调用 NtClose 释放。
有关安全性和访问控制的详细信息,请参阅 面向驱动程序开发人员的 Windows 安全模型 和 Windows SDK 中有关这些主题的文档。
对于来自内核模式驱动程序的调用,Windows Native System Services 例程的 NtXxx 和 ZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxx 和 ZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本。
要求
要求 | 值 |
---|---|
Header | ntifs.h |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |