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开发