概述:内核模式下遍历系统当前进程,以及链表的基本使用
相关接口
相关知识点
PID
PID 一定是4的整数倍
为什么 PID 一定是4的整数倍
Windows进程的PID(Process ID)是4的倍数的原因与Windows内核中句柄分配机制有关。以下是详细的解释:
-
句柄分配机制:在Windows NT内核的操作系统中,进程ID(PID)和线程ID(TID)实际上是基于全局的句柄表PspCidTable生成的,这个表也被称为CID句柄表(Client ID handle table)。这个句柄表中的每个项都包含了进程或线程的对象地址。
-
句柄值与索引:在Windows中,句柄值是用来检索句柄表的一个“伪索引”。由于句柄值的低2位被用作标志位,因此它们对于作为句柄表索引本身没有意义。这意味着句柄值实际上是4的倍数,因为每4个字节对应一个句柄索引值。
-
内核句柄重用:分配内核句柄的相同代码也用于分配进程和线程ID。由于内核句柄是4的倍数,因此进程和线程ID也是如此。这是一个实现细节,因此不应编写依赖于这个规律的代码。
-
结构定义:在Windows内核中,句柄类型是由
EXHANDLE结构定义的,其中包含一个ULONG值,用于存储索引。由于低2位被用作标志位,所以有效的索引从第3位开始,这就是为什么句柄值(以及由此产生的PID和TID)是4的倍数的原因。 -
历史和兼容性:这个机制在Windows的多个版本中一直保持不变,主要是因为底层代码难以改变。即使在最新的Windows版本中,这个规律依然存在。
总结来说,Windows进程PID是4的倍数是由于内核中句柄分配机制的设计,特别是与句柄值的位结构和内核句柄重用代码有关。这是一个实现细节,不应该依赖于应用程序开发中。
完整代码
1 |
|