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 | 任何级别 (请参阅备注) |