Windows驅動開發(一)

2021-06-22 23:14:19 字數 2115 閱讀 6200

筆者學習驅動程式設計是從兩本書入門的。它們分別是《寒江獨釣——核心安全程式設計》和《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: 無法解析的外部符號 @__security_check_cookie@4

請您將「專案屬性」-「c/c++」-「**生成」的「緩衝區安全檢查」設為「否」

Windows驅動開發 (一)序言

筆者學習驅動程式設計是從兩本書入門的。它們分別是 寒江獨釣 核心安全程式設計 和 windows驅動開發技術詳解 兩本書分別從不同的角度介紹了驅動程式的製作方法。在我理解,驅動程式可分為兩類三種 第一類 傳統型驅動 傳統型驅動的特點就是所有的irp都需要自己去處理,自己實現針對不同irp的派發函式。...

Windows驅動開發 (一)序言

筆者學習驅動程式設計是從兩本書入門的。它們分別是 寒江獨釣 核心安全程式設計 和 windows驅動開發技術詳解 兩本書分別從不同的角度介紹了驅動程式的製作方法。在我理解,驅動程式可分為兩類三種 第一類 傳統型驅動 傳統型驅動的特點就是所有的irp都需要自己去處理,自己實現針對不同irp的派發函式。...

Windows驅動開發 (一)序言

筆者學習驅動程式設計是從兩本書入門的。它們分別是 寒江獨釣 核心安全程式設計 和 windows驅動開發技術詳解 兩本書分別從不同的角度介紹了驅動程式的製作方法。在我理解,驅動程式可分為兩類三種 第一類 傳統型驅動 傳統型驅動的特點就是所有的irp都需要自己去處理,自己實現針對不同irp的派發函式。...