標籤:style http color 使用 檔案 代碼 工作 ar
筆者學習驅動編程是從兩本書入門的。它們分別是《寒江獨釣——核心安全編程》和《Windows驅動開發技術詳解》。兩本書分別從不同的角度介紹了驅動程式的製作方法。
在我理解,驅動程式可分為兩類三種:
第一類:傳統型驅動
傳統型驅動的特點就是所有的IRP都需要自己去處理,自己實現針對不同IRP的派發函數。其可以分為以下兩種:
1. Nt式驅動:此驅動通過註冊系統服務來載入,並且不支援隨插即用功能(即沒有處理IRP_MJ_PNP這個IRP)。
2. WDM驅動:此驅動不通過註冊系統服務來載入,需啊喲自己編寫inf檔案。同時,它與NT式驅動相比最大的特點就是支援隨插即用功能。
第二類:微過濾驅動
微過濾驅動是微軟推出的一個驅動架構。它將驅動程式內建立裝置對象之類的操作全部封裝了,讓使用者無需理會此部分繁雜的工作。使用者只需要針對不同的IRP處理好他們響應的前-後操作還有使用者態與核心態的通訊即可,即可以理解為微過濾驅動對IRP的處理類似於使用者態的API HOOK。
對於剛開始編寫驅動程式的新人來說,使用微過濾驅動是最好不過的了。因為它將大量的內部邏輯進行了封裝,我們只需要實現相應的處理邏輯即可。由於筆者先開始看的是《Windows驅動開發技術詳解》,所以從第一章的“從兩個最簡單的驅動談起”開始接觸了傳統型驅動的兩種形式,從而入門。
在開始介紹傳統型驅動之前,先補充說明一下驅動的編譯方式。
驅動的編譯方式有很多種。
● 微軟官方推薦使用WDK提供的Build Environments來對相應系統編譯驅動,此方法需要使用者自行建立Source檔案編譯,對於不熟悉的人略顯困難
● VS+ddkwizard。ddkwizard外掛程式會在VS中添加一個DDK工程,它可以產生基本的WDM驅動模板,相對來講會稍微方便些,但是還是需要一些配置。
● 直接使用VS編譯。對於做慣使用者態開發的人來講,這個是最方便的,目前我用的也是這種方式。它的配置項會相對多一點,但是相信這不是障礙。下面就介紹一下如何配置VS(以VS2005為例)
VS2005配置驅動編譯環境方法:
1. 安裝WDK,並配置系統內容變數:WDKROOT-D:\WinDDK\7600.16385.1
2. 啟動VS2005,在功能表列“工具”-“選項”內選擇“項目和解決方案”-“VC++目錄”依次添加所需的目錄,具體配置如:
注意:$(WDKROOT)\inc\api一定要放在第一個,否則會導致編譯失敗
3. 具體的項目屬性按照如下設定:
註:建立項目時選擇“Win32項目”
按照以片配置好後就可以直接編譯驅動程式了,此配置是XP系統的,其他系統的連結不同的庫就可以了。
註:如果在編譯過程中遇到如下錯誤:
error LNK2019: 無法解析的外部符號 @[email protected]
請您將“項目屬性”-“C/C++”-“代碼產生”的“緩衝區安全檢查”設為“否”