进程的双链表有 Flink 和 Blink(Forward Link 和 Backward Link)。有一个进程标识符。所有这些都打包在一个结构中,该结构被称为 PEPROCESS 或 _KPROCESS。但是这些在哪里,这个结构中的其他元素是什么?
或者,如果答案既不简短也不简单,如果不在文档或头文件中,在哪里可以找到参考资料?(这是我看过的地方,可能忽略了一些东西。)
进程的双链表有 Flink 和 Blink(Forward Link 和 Backward Link)。有一个进程标识符。所有这些都打包在一个结构中,该结构被称为 PEPROCESS 或 _KPROCESS。但是这些在哪里,这个结构中的其他元素是什么?
或者,如果答案既不简短也不简单,如果不在文档或头文件中,在哪里可以找到参考资料?(这是我看过的地方,可能忽略了一些东西。)
EPROCESS 结构是一个不透明的结构,用作进程的进程对象。
一些例程,例如 PsGetProcessCreateTimeQuadPart,使用 EPROCESS 来识别要操作的进程。驱动程序可以使用 PsGetCurrentProcess 例程获取指向当前进程的进程对象的指针,并且可以使用 ObReferenceObjectByHandle 例程获取指向与指定句柄关联的进程对象的指针。PsInitialSystemProcess 全局变量指向系统进程的进程对象。
请注意,流程对象是对象管理器对象。驱动程序应该使用对象管理器例程,例如 ObReferenceObject 和 ObDereferenceObject 来维护对象的引用计数。
这意味着,您不应该关心流程结构的成员是什么。尽管如此,还是有一些资料详细说明了流程结构的布局。
这本书更详细地描述了各个成员是什么。
EPROCESS 结构记录在 windows 调试符号中。
使用 windbg 连接到内核时,假设您已正确设置调试符号,发出命令“dt nt!_EPROCESS”应该为您提供特定于您所连接的内核版本的 EPROCESS 结构的布局。