Visual Studio 2013开发 mini-filter driver step by step 获取可执行文件名称 - 实现process monitor的一个功能 (10)
国庆就要结束了,遗憾一下:)
先看看process monitor的样子
他的功能就是监控哪些应用程序执行了什么操作,比如打开了哪些文件,读取了哪些文件等。
今天在使用一张小学英语光盘的时候,发现安装软件后,必须要光盘才能运行,很是麻烦,而且里面的mp3文件也不知道在哪里存放,把隐藏文件,系统文件等显示了,仍然不知道那些mp3存放在光盘的什么地方了,没办法,又要想拷贝他们到手机上,好辅导孩子的学习,不能每次都把光盘放到电脑上,好麻烦。
所以启动了process monitor,很快就知道了mp3的藏身之处,就在光盘的一个名字叫assets的目录下面。轻松拷贝下来:)
今天要讨论的就是怎么获得应用程序的名字,从内核态很容易知道哪些文件被操作了,前面的blog中已经提到了,这里不再赘述。
要获得应用程序的名字,有很多种方法,网上也有很多讨论,主要的方法就是利用EPROCESS结构,用类似hack的方法来查找文件名,基本思路是在Driver_Entry中获取到system进程的名字,然后记录下进程名的偏移量,然后再在需要的时候使用这个偏移量来获得进程名。
这个方法确实可行,但是也有一些问题,不同的系统EPROCESS可能会有所不同,会有不兼容的问题。
从Windows XP以后,ntoskrnl.exe提供了一个未公开API,叫PsGetProcessImageFileName,该函数的原型为:
char* PsGetProcessImageFileName(PEPROCESS p);
虽然为公开文档,但是可以直接拿来使用,使用的时候当然也很简单。
需要先申明一下:
extern
char* PsGetProcessImageFileName(PEPROCESS p);
然后就可以使用了:
PsGetProcessImageFileName(PsGetCurrentProcess());
注意,只能返回进程名,而不会返回全路径,正如process monitor一样。
总结
以上是生活随笔为你收集整理的Visual Studio 2013开发 mini-filter driver step by step 获取可执行文件名称 - 实现process monitor的一个功能 (10)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Chromium:编译,运行
- 下一篇: Visual Studio 2013开发