Windows檔案系統過濾驅動開發教程
0. 作者,楚狂人自述
我長期網上為各位專案經理充當“技術實現者”的角色。我感覺Windows檔案系統驅動的開發能找到的資料比較少。為了讓技術經驗不至於遺忘和引起大家交流的興趣我以我的工作經驗撰寫本教程。
我的理解未必正確,有錯誤的地方望多多指教。有問題歡迎與我聯絡。我們也樂於接受各種驅動項目的開發。郵箱為MFC_Tan_Wen@163.com,QQ為16191935。
對於這本教程,您可以免費獲得並隨意修改,向任何網站轉貼。但是不得剽竊任何內容作為任何贏利出版物的全部或者部分。
1. 概述,鑽研目的和準備
我經常在網上碰到同行請求開發檔案系統驅動。windows的pc機上以過濾驅動居多。其目的不外乎有以下幾種:
一是用於防病毒引擎。希望在系統讀寫檔案的時候,捕獲讀寫的資料內容,然後檢測其中是否含有病毒代碼。
二是用於加密檔案系統,希望在檔案寫過程中對資料進行加密,在讀的過程中進行解密。
三是設計透明的檔案系統加速。讀寫磁碟的時候,合適的cache演算法是可以大大提高磁碟的工作效率。windows本身的cache演算法未必適合一些特殊的讀寫
磁碟操作(如流媒體伺服器上讀流媒體檔案)。設計自己的cache演算法的效果,我已在工作中有所感受。
如果你剛好有以上此類的要求,你可以閱讀本教程。
檔案系統驅動是windows系統中最複雜的驅動種類之一。不能對ifsddk中的協助抱太多希望,以我的經驗看來,檔案系統相關的ddk協助極其簡略, 很多重要的部分僅僅輕描淡寫的帶過。如果安裝了ifsddk,應該閱讀src\filesys\OSR_docs下的文檔。而不僅僅是ddk協助。
檔案系統驅動開發方面的書籍很少。中文資料我僅僅見過侯捷翻譯過的一本驅動開發的書上有兩三章涉及,也僅僅是只能用於9x的vxd驅動。NT檔案系統我見過一本英文書。我都不記得這兩本書的書名了。
如果您打算開發9x或者nt檔案系統驅動,建議你去網上下載上文提及的書。那兩本書都有免費的電子版本下載。如果你打算開發Windows2000\ WindowsXP\Window2003的檔案系統驅動,你可以閱讀本教程。雖然本教程僅僅講述檔案系統過濾驅動。但是如果您要開發一個全新的檔案系統 驅動的話,本教程依然對你有很大的協助。
學習檔案系統驅動開發之前,應該在機器上安裝ifsddk。ddk版本越進階,其中標頭檔中提供的系統調用也越多。經常有人詢問如xpddk編譯的驅動能 不能在2000上運行等等的問題。我想可以這樣解釋:進階版本的ddk應該總是可以編譯低級驅動的代碼,而且得到的二進位版本也總是可以在低級系統上運 行。但是
反過來就未必可以了。如果在進階系統上編寫用於低級系統上的驅動,要非常認真的注意僅僅調用低級系統上有的系統調用。
ifsddk可以在某些ftp上免費下載。
我的使用的是ifs ddk for xp,但是我實際用來開發的兩台機器有一台是windows 2000,另一台是windows 2003.我盡量使我編譯出來的驅動,可以在2000\xp\2003三種系統上都通過測試。
安裝配置ddk和在vc中開發驅動的方法網上有很多的介紹。ifsddk安裝之後,src目錄下的filesys目錄下有檔案系統驅動的樣本。閱讀這些代碼你就可以快速的學會檔案系統驅動開發。
filter目錄下的sfilter是一個檔案系統過濾驅動的例子。另一個filespy完全是用這個例子的代碼加工得更複雜而已。
如何用ddk編譯這個例子請自己查看相關的資料。
檔案系統過濾驅動編譯出來後你得到的是一個副檔名為sys的檔案。同時你需要寫一個.inf檔案來實現這個驅動的安裝。我這裡不討論.inf檔案的細節,你可以直接用sfilter目錄下的inf檔案修改。
對inf檔案點滑鼠右鍵快顯功能表選擇“安裝”,即可安裝這個過濾驅動。但是必須重新啟動系統才生效。
如果重啟後藍屏無法啟動,可以用其他方式引導系統後到system32\drivers目錄下刪除你的.sys檔案再重啟即可。我嘗試這種情況下用安全模式結果還
是藍屏。所以我後來不得不在機器上裝了兩個2000系統。雙系統情況下,一個系統崩潰了用另一個系統啟動,刪除原來的驅動即可。
如果要調試代碼,請安裝softice.
開啟sfilter目錄下的檔案sources(這個檔案沒有副檔名),加入一行
BROWSER_INFO=1
然後開啟Symbol Loader,File->Open選中你編譯出來的xxx.sys,Modul->Load,Modul->Translate,然後就可以調試了。
開啟softice,輸入file *就可以看見代碼。
如果準備好了,我們就可以開始琢磨windows檔案系統過濾驅動的開發了。