为什么PsGetCurrentProcessId()返回null?

我碰到一个奇怪的问题:

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

而且,我检查了线程的_CLIENT_ID,发现UniqueProcess和UniqueThread都是null。

我也检查了当前进程,即“系统”进程,发现它的UniqueProcessId是4,这是正常的。

为什么?

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

如果你是一个只有内核的线程,那么你就没有关联的进程(除非你自己攻击一个进程)。