Windows驱动学习笔记之三 驱动枚举进程(WIN64)

来源:互联网 发布:呦呦切克闹网络神曲 编辑:程序博客网 时间:2024/05/08 22:22


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_PROCESS_CREATION_INFO -> _OBJECT_NAME_INFORMATION -> ImageFileName

                       这里面存的是全路径,能取到全路径,还怕取不到进程名吗?嘿嘿,这个不用我再说了吧。


                 但是.......取到的路径格式会是\Device\HardVolume1\......这是NT路径,却不是我们的DOS路径,经过实验证明

                ZwCreateFile,ObReferenceObjectByHandle,RtlVolumeDeviceToDosName这三个API结合,就可以把\Device\HardVolume1\转换成我们习惯的DOS路径。


这些说起来挺容易,对于新手第一次做如果没有任何讲解还是,想找到上面说的第二点还是需要些时间的。



0 0
原创粉丝点击