如notepad pid为1001
关掉notepad之后,这个1001有否可能再次被使用!
谢谢
关掉notepad之后,这个1001有否可能再次被使用!
谢谢
解决方案 »
- 怎么通过串口进行任意类型的文件收发呢
- CBitmap.LoadBitmap从BMP文件载入失败,从资源载入能成功?
- 坐标系的问题?急等ing...
- 消息参数怎么啦?
- how to initialize the VARIANT with BStr or char,3qs
- ISAPI中,访问别的机子是是用的哪个帐户,好象不是匿名用户
- vc6++下面 CString 如何转换为long
- ++++++++++++本人打算做一个OICQ自动收发信息的软件。++++++++++++++++++++++++++
- 关于同一个批处理文件为什么结果不一样
- CEDITVIEW文本保存问题
- 用ADO中的ID.什么类来列举数据库表时会把系统表也列出来,怎样不要这些表,只列我建的表呢?
- 数据库ADO排序问题
作者:陆麟
转载请征得作者同意.
2003.9.3--------------------------------------------------------------------------------
一直以来, 我一直认为OS在系统范围内部维护PID/TID的清单. PID/CID不可能出现重复, 这也是很多KERNEL MODE UTILITY赖以实现的基础. 但是, 今天, 这条金科玉律被打破了. PID是可以重复的. 错误的观点来自与错误的流程理解. PROCESS在内核是以EPROCESS识别的. 进程创建时刻, PID/TID什么的均是不存在的. 其次, 进程结束, 并不意味着EPROCESS的销毁. EPROCESS销毁的时刻为所有的PROCESS HANDLE都关闭后. PID的来源是CSRSS, CSRSS负责分配PID/TID. 这下可糟糕了. 假定有一个进程, 创建了1个子进程. 然后字进程结束, 父进程没有关闭进程句柄. 这样一个流程会导致僵尸进程的存在, 而CSRSS并不知道EPROCESS的存在与否. 因此, 仍然按照自己的算法分配PID/TID. 这样, 同样的PID就可能出现在系统范围内部. 依赖与PID运作的代码可要仔细考虑一下流程是否有可能出现问题了.使我醒悟的只言片语, 来自NEWSGROUP, 虽然我没有参与那个THREAD, 但是人家的言语始终可能会有帮助. 发言的是Ivan Brugiolo, 来自MICROSOFT.
The NtQuerySystemInformation call for system processes is not transacted with process creation. You can have a handle for the process signaled when it's dead, but the EPROCESS object has not been yet removed from the list kept in kernel mode. It would be removed when the last reference to the handle is closed. This can cause the so called 'zombie process' to staty around with some parent-pid or the same pid that has been reused. Since CLIENT_ID are allocated by csrss.exe, this can happen.