驅動文件操作學習與實踐

http://blog.csdn.net/syf442/article/details/4562976

看了這篇文章,按照其講述和代碼,自己也再vs2010上編寫了一個內核讀寫文件操作的小驅動。在這個過程中學習到其中用到的幾個內核函數的用法,也發現了這個小教程中的一點小錯誤。花了2個晚上的時間調試,雖然很費時間,windows的函數都很複雜,調試起來又很費勁。所以記錄一下,以後遇到類似問題也可以參考一下。

這個小驅動大概的流程是:

建立一個線程(用到PsCreateSystemThread函數) =》線程中定義了一個此線程首先調用的函數,自己寫好這個函數,作爲建立文件、寫文件的入口函數

=》在此函數中創建新文件或者打開文件(參數FILE_OVERWRITE_IF)(都是用ZwCreateFile函數,每個參數很重要,需要時要仔細參考MSDN,好好分析。它關係到後面可以對這個文件所進行操作的權限)

KdPrint(("status:%08x\n",status));
在調試中可以加上這句,打印ZwCreateFile函數的返回值。返回值是用16進製表示的,其對應的含義(宏)可以參照

http://wenku.baidu.com/view/06a8444be45c3b3567ec8bcc.html通過英文含義可以瞭解錯誤所在。

=》建立或者打開了文件,要調用ZwWriteFile函數,這個函數相比上一個函數比較簡單

=》最後掉用ZwClose函數關閉文件句柄

=》之後回到EntryDriver函數可以按照正常情況寫個unload函數

這就是簡單的文件操作流程

最後說一下上面那個帖子的錯誤:

第一個是它換行符寫錯了。。比較低級“\n”寫成了“/n”。應該是回車上面的那個反斜線

第二個也是這個反斜線的問題,這個問題會使驅動不能正常運行,到不至於藍屏。就是頂一文件路徑的時候

	UNICODE_STRING ufile_name = RTL_CONSTANT_STRING(L"\\??\\C:\\test.txt");
這是正確的,注意斜線別寫反了方向,參考的blog中就寫反了。導致我調試了好久都不行,總是報錯:STATUS_ACCESS_DENIED出現這個錯誤信息。

一直都沒注意到這個斜線的問題,以後這個問題應該是記住了,自己寫的時候肯定不會再出這種錯誤了。


再加點用到的windbg命令,這次調試主要用到了以下幾種命令和視圖:

1. r @esi  (r @寄存器名字) 返回結果是這個寄存器目前保存的值

2.lm命令,一個比較基礎的命令。可以返回現在運行的符號鏈接庫,包括現在正在調試的驅動的符號鏈接,pdb。

3.watch視圖,以前用eclipse的watch視圖一樣,可以看變量的類型和值,還有local視圖等等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章