NtOpenThreadToken 函数 (ntifs.h)
NtOpenThreadToken 例程打开与线程关联的访问令牌,并返回可用于访问该令牌的句柄。
语法
__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenThreadToken(
[in] HANDLE ThreadHandle,
[in] ACCESS_MASK DesiredAccess,
[in] BOOLEAN OpenAsSelf,
[out] PHANDLE TokenHandle
);
参数
[in] ThreadHandle
要打开其访问令牌的线程的句柄。 句柄必须具有THREAD_QUERY_INFORMATION访问权限。 使用 NtCurrentThread 宏指定当前线程。
[in] DesiredAccess
ACCESS_MASK 结构,指定对访问令牌的请求访问类型。 这些请求的访问类型与令牌的任意访问控制列表(DACL)进行比较,以确定授予或拒绝哪些访问权限。
[in] OpenAsSelf
一个布尔值,指定是针对调用 ntOpenThreadTo ken
如果此参数 FALSE,则使用调用线程的安全上下文执行访问检查。 如果线程正在模拟客户端,则此安全上下文可以是客户端进程的上下文。 如果此参数 TRUE,则使用调用线程的进程的安全上下文进行访问检查。
[out] TokenHandle
指向调用方分配的变量的指针,该变量接收新打开的访问令牌的句柄。
返回值
NtOpenThreadToken 返回STATUS_SUCCESS或适当的错误状态。 可能的错误状态代码包括:
返回代码 | 描述 |
---|---|
STATUS_ACCESS_DENIED | |
ThreadHandle 没有THREAD_QUERY_INFORMATION访问权限。 | |
STATUS_CANT_OPEN_ANONYMOUS | 客户端请求 SecurityAnonymous 模拟级别。 但是,无法打开匿名令牌。 有关详细信息,请参阅 SECURITY_IMPERSONATION_LEVEL。 |
STATUS_INVALID_HANDLE | ThreadHandle 不是有效的句柄。 |
STATUS_NO_TOKEN | 尝试打开与当前不模拟客户端的线程关联的令牌。 |
STATUS_OBJECT_TYPE_MISMATCH | ThreadHandle 不是线程句柄。 |
言论
NtOpenThreadToken 打开与线程关联的访问令牌,并返回该令牌的句柄。
OpenAsSelf 参数允许服务器进程在客户端进程为 SECURITY_IMPERSONATION_LEVEL 枚举类型指定 SecurityIdentification 模拟级别时打开客户端进程的访问令牌。 如果没有此参数,调用过程将无法使用客户端的安全上下文打开客户端的访问令牌,因为无法使用 SecurityIdentification 模拟级别打开执行级别对象。
通过调用 NtOpenThreadToken 获取的任何句柄最终都必须通过调用 NtClose释放。
有关安全和访问控制的详细信息,请参阅适用于驱动程序开发人员
对于内核模式驱动程序的调用,NtXxx 和 ZwXxx 版本的 Windows 本机系统服务例程的行为方式可能以不同的方式处理和解释输入参数。 有关 NtXxx 与 ZwXxx 例程之间的关系的详细信息,请参阅 使用 Nt 和 Zw 版本的本机系统服务例程。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP |
标头 | ntifs.h |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |