为什么PsGetCurrentProcessId()返回null?

为什么PsGetCurrentProcessId()返回null?,c,windows,kernel,windbg,pid,C,Windows,Kernel,Windbg,Pid,我遇到了一个奇怪的问题: 在“system”进程的线程中,我调用了PsGetCurrentProcessId(),但得到了一个空值 此外,我检查了线程的_CLIENT_ID,发现UniqueProcess和UniqueThread都为null 我还检查了当前进程,即“系统”进程,发现其UniqueProcessId为4,这是正常的 为什么?系统进程ID是一个非常好的“黑客”工具,因此多个工具(如ProcExp、windbg)不需要特殊情况下的纯内核线程或空闲函数调度程序 如果您是纯内核线程,则没

我遇到了一个奇怪的问题:

在“system”进程的线程中,我调用了
PsGetCurrentProcessId()
,但得到了一个空值

此外,我检查了线程的_CLIENT_ID,发现UniqueProcess和UniqueThread都为null

我还检查了当前进程,即“系统”进程,发现其UniqueProcessId为4,这是正常的


为什么?

系统进程ID是一个非常好的“黑客”工具,因此多个工具(如ProcExp、windbg)不需要特殊情况下的纯内核线程或空闲函数调度程序


如果您是纯内核线程,则没有关联的进程(除非您攻击自己的进程)。

您所说的“我还检查了当前进程”是什么意思,即您使用了哪些系统调用来执行此操作?另外,问题中的线程来自何处,即调用PsGetCurrentProcessId时您处于什么上下文中?我使用WinDBG检查这些线程。您如何确定该线程的“当前进程”是系统进程?@Harry,通过WinDBG命令:。进程和!processOK,这里有两个问题:为什么当前进程ID(由_CLIENT_ID和PsGetCurrentProcessId返回)为零,为什么WinDBG仍然将其显示为4?我怀疑第一个问题的答案是系统线程是一种特例。例如,可能所有纯内核线程的ID都为零,只有用户模式系统线程的ID为4。至于第二个问题,我不知道,但这可能只是WinDBG的一个奇怪之处。