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 调用方没有创建令牌句柄所需的特权(SeSecurityPrivilege),该句柄具有在 DesiredAccess 参数中指定的访问权限。
STATUS_QUOTA_EXCEEDED 进程的内存配额不足以分配令牌句柄。
STATUS_UNSUCCESSFUL 无法创建令牌句柄。

言论

若要指定访问令牌句柄的属性,请改用 NtOpenProcessTokenEx

该句柄可由运行驱动程序的上下文的进程访问。

通过调用 NtOpenProcessToken 获取的任何句柄最终都必须通过调用 NtClose释放。

有关安全和访问控制的详细信息,请参阅适用于驱动程序开发人员 Windows 安全模型,以及有关 Windows SDK 中这些主题的文档。

对于内核模式驱动程序的调用,NtXxxZwXxx 版本的 Windows 本机系统服务例程的行为方式可能以不同的方式处理和解释输入参数。 有关 NtXxxZwXxx 例程之间的关系的详细信息,请参阅 使用 Nt 和 Zw 版本的本机系统服务例程

要求

要求 价值
标头 ntifs.h
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

另请参阅

ACCESS_MASK

ACL

PsDereferencePrimaryToken

NtClose

NtOpenProcessTokenEx

NtOpenThreadTokenEx