EnumProcess(Source Code), 列举当前系统下所有进程

来源:互联网 发布:向js数组中添加元素 编辑:程序博客网 时间:2024/06/04 20:20

说明:用PSAPI.DLL里函数写的,此代码无PSAPI.H头文件,无PSAPI.LIB链接库文件。
功能:列举当前系统下所有进程,包括PID,进程名,进程完整路径。
环境:Win2000+sp4+VC6.0
另外:本人水平有限,错误在所难免,望高手批评。

 

-------------------------------------------------------------------------------------

请教个问题楼主:
我在Windows2000P + sp4 + VC6.0下调试的时候有2个进程如下:
Path:/??/C:/WINNT/system32/csrss.exe

4 192 winlogon.exe
Path:/??/C:/WINNT/system32/winlogon.exe

为什么路径前面有2个“?”号呢?
还有个进程为:
2 140 smss.exe
Path:/SystemRoot/System32/smss.exe
它的路径为什么是/SystemRoot?虽然systemroot和C:/winnt/差不多。
其他进程基本都正常... ...

 

 

-----------------------------------------------------------------------------------

/??/C:是符号连接 这是为了让应用程序操作设备而导出的
在存储Windows对象的Hash Table中 它看上去是这样的
DosDevices --> Global --> 符号连接 比如 C:是符号连接
但"连接"的设备就是/Device/HarddiskVolume1 系统第一个分区

至于SystemRoot 表示系统根目录 也是一个符号连接 形如
/Device/Harddisk0/Partition1/WINNT或WINDOWS 如果是2000
系统 就是WINNT 如果是XP/2003 就是Windows
而Partition1也是一个符号连接 它"连接"到/Device/HarddiskVolume1
拼接起来就是/Device/HarddiskVolume1/WINDOWS或WINNT
其实就是C:/WINDOWS或WINNT了