PsGetCurrentThreadTeb 函数 (ntddk.h)
PsGetCurrentThreadTeb 例程返回当前线程的线程环境块 (TEB) 或 NULL。 必须在内核模式下进行调用。
语法
PVOID PsGetCurrentThreadTeb();
返回值
指向当前线程的线程环境块的指针。 应在 try/catch 异常块中访问 TEB。
PsGetCurrentThreadTeb 在以下情况下返回 NULL:
- 当前线程没有 TEB (例如系统线程) 。
- 当前线程无法安全地访问自己的 TEB。 如果驱动程序将线程附加到另一个进程的地址空间(例如通过调用 KeStackAttachProcess),则可能会发生这种情况。
注解
虽然可以在任何 IRQL 上调用 PsGetCurrentThreadTeb 而不导致 bug 检查,但 TEB 在DISPATCH_LEVEL或更高版本访问并不安全, (它可能被分页) 。 此外,如果从中断或 DPC 的上下文中调用提升的 IRQL,则当前线程就是在当前处理器上传递中断时碰巧运行的任何线程。 因此,建议从DISPATCH_LEVEL下面的线程上下文调用 PsGetCurrentThreadTeb 。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 Windows 7 和更高版本的 Windows 中可用。 |
目标平台 | 通用 |
标头 | ntddk.h |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | 任何级别 (请参阅备注) |