首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >windows-内核-线程标识是否与进程id相同?

windows-内核-线程标识是否与进程id相同?
EN

Stack Overflow用户
提问于 2011-10-11 19:01:01
回答 1查看 1.2K关注 0票数 0

嗨,我四处寻找这个问题的答案,我想知道是否有任何在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中仍然存在和经验观察使我相信上述观点仍然正确。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-11 19:25:04

线程和进程in来自windows AFAIK的所有版本中的同一个池,但这并不意味着这将永远是正确的。在实践中,这一点都不重要,因为您只应该将您知道是线程id的东西传递给OpenThread,反之亦然。

也不要假设这些ids是其他事情 (它们不是16位,它们看起来像是在NT上,但是可以获得ids >0 0xffff (在Win9x上,它们是秘密的,并且经常使用完整的32位))

唯一奇怪的是,在64位系统上,用户模式是32位,内核模式是指针大小(使用HandleToUlong/UlongToHandle)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7731089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档