嗨,我四处寻找这个问题的答案,我想知道是否有任何在windows内部有经验的人知道内核是否会分配一个与线程id相同的进程id。我的意思是,我已经启动了进程a.exe,它有一个id 123的线程。如果启动了另一个进程,例如b.exe,进程id是123吗?换句话说,进程和线程标识符是否会发生冲突?谢谢
编辑:进程和线程It似乎来自同一个名为PspCidTable的池。查看windows nt源的名为多项式的黑客说:
内核需要能够生成在整个系统中唯一的进程和线程ID序列。为了高效和安全地完成这一任务,内核创建了一个ID池,可以用于进程和线程。这个池作为一个名为HANDLE_TABLE的PspCidTable对象在内核中导出。在系统的Phase0启动期间,调用PspInitPhase0函数。此函数使用HANDLE_TABLE创建一个ExCreateHandleTable对象,该对象使用65536个实体自动填充表。每个条目都是存储在列表项对象中的16位无符号整数(至少在32位OS上),该列表对象是双链接列表的一部分。进程和线程ID都来自PspCidTable池。
资料来源:你(可能)不知道Windows的东西
Windows 7中的PspCidTable 在Windows中仍然存在和经验观察使我相信上述观点仍然正确。
发布于 2011-10-11 19:25:04
线程和进程in来自windows AFAIK的所有版本中的同一个池,但这并不意味着这将永远是正确的。在实践中,这一点都不重要,因为您只应该将您知道是线程id的东西传递给OpenThread,反之亦然。
也不要假设这些ids是其他事情 (它们不是16位,它们看起来像是在NT上,但是可以获得ids >0 0xffff (在Win9x上,它们是秘密的,并且经常使用完整的32位))
唯一奇怪的是,在64位系统上,用户模式是32位,内核模式是指针大小(使用HandleToUlong/UlongToHandle)。
https://stackoverflow.com/questions/7731089
复制相似问题