如何在Windows下的内核模式下生成PID(进程标识符)?

时间:2011-01-04 12:37:46

标签: kernel pid

我想知道如何在Windows下生成进程标识符(又称PID)。它在不同机器上是否独一无二?例如,考虑当前分配给我的Firefox程序的5856 id。对于另一台机器下的同一可执行映像,它是否相同?

4 个答案:

答案 0 :(得分:4)

PID生成主要是微软不会正式记录的秘密 - 因为一旦他们记录下来,就必须坚持使用该实现。但是,它总是4的倍数 - 但这不是你应该依赖的行为。它们不是唯一的,可以重复使用。

Raymond Chen在他的blog中提到了这一点。

答案 1 :(得分:2)

进程标识符在不同的计算机上不是唯一的。它们可以在同一台机器上重用以用于后续进程,并且在同一可执行文件的两次调用之间通常不会相同。

您不应该关心它是如何生成的 - 您唯一可以确定的是,进程标识符唯一地标识单个正在运行的进程,即在任何一个进程中只有一个进程具有该标识符时间。

答案 2 :(得分:1)

进程,线程和内核句柄ID来自常见例程。从技术上讲,这是一个DWORD虽然我不记得上次我看到它们超过65,536。它们可以重复使用,它只是一种基于反制的机制。

答案 3 :(得分:0)

进程作为内核中的对象进行维护,因此,通过HANDLEs以与系统中每个其他对象(即事件,互斥体,信号量,定时器等)相同的方式导出到用户模式。

因此,进程ID实际上只是处理对象的HANDLE,它们在全局句柄表(PspCidTable,作为实现细节)中维护。另外,线程也作为对象进行维护,并且也插入到此表中。那么线程ID实际上只是线程对象的HANDLE。

-Scott