PsGetCurrentThreadTeb 函数 (ntddk.h)

PsGetCurrentThreadTeb 例程返回当前线程的线程环境块(TEB),或返回 NULL。 必须在内核模式下调用。

语法

PVOID PsGetCurrentThreadTeb();

返回值

指向当前线程的线程环境块的指针。 应在 try/catch 异常块中访问 TEB。

PsGetCurrentThreadTeb 在以下情况下返回 NULL:

  • 当前线程没有 TEB(例如系统线程)。
  • 当前线程无法安全地访问自己的 TEB。 如果驱动程序将线程附加到另一个进程的地址空间,例如调用 KeStackAttachProcess,则可能会出现这种情况。

言论

虽然 PsGetCurrentThreadTeb 可以在任何 IRQL 上调用,但不会导致 bug 检查,但 TEB 在DISPATCH_LEVEL或更高版本上无法访问(可以分页)。 此外,如果要从中断或 DPC 的上下文中调用提升的 IRQL,则当中断传送到该处时,当前线程是当前处理器上运行的任何情况。 因此,建议从DISPATCH_LEVEL下面的线程上下文调用 PsGetCurrentThreadTeb

要求

要求 价值
最低支持的客户端 在 Windows 7 及更高版本的 Windows 中可用。
目标平台 普遍
标头 ntddk.h
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 任何级别 (请参阅备注)

另请参阅

进程和线程管理器例程