WIN64 驱动下枚举进程实际是最简单的,网上流传的版本很多(跟32位没什么区别),其实都是是获取 _EPROCESS,通过_EPROCESS来获取系统的所有进程。
这里只想说对于新手要注意两点:
1.是别把已经退出的进程也给显示出来
_EPROCESS->EXITTIME 注意这个可以判断进程是否已经退出 ,退出就没必要再显示了,直接忽略掉
_EPROCESS->ObjectTable 这个也是判断进程是否退出的好方法,如果进程真的完全死掉了,这位为NULL,但这个对于系统空闲进程(Idle)不能这么判断,Idle也为NULL,但EXITTIME却不显示退出
最好是两个一起判断,因为EXITTIME也不完全保证(如果有人把这个值故意设置成退出呢?)
2.是PsGetProcessImageFileName不要用
对于新手来说有API直接返回固然是好事,但这个API对应的是_EPROCESS->ImageName[16],看到数组了吗?
最多只能16个字符啊,要是进程名子超过了肿么办呢,肯定取不全了,取一半肯定不是我们想要的。所以不建议使用这个API。
其实还有很多地方可以取,这里说一个
EProcess -> _SE_AUDIT_PROCE