检测进程是否被调试;在核心地带

Detect whether a process is being debugged; in kernel land

有没有办法检测(在内核模式下)调试器(在用户模式下)附加到 Windows 上的另一个进程(也在用户模式下)?

我在 EPROCESS 结构中找不到任何 API 或标志可以显示此信息。理想情况下,我正在寻找一个不能从用户模式下的程序更改的标志,但我不知道此信息是否也保存在内核级别。

谢谢!

存在(来自 xp)未记录 api

extern "C"
NTKERNELAPI
BOOLEAN
PsIsProcessBeingDebugged(PEPROCESS Process);

其中 return Process->DebugPort != NULL 非常简单可靠 api,可以在任何 irql 中使用(因为 Process 对象不在分页内存中)。

  • 图书馆: NtosKrnl.lib
  • IRQL: 任意级别