Windows的驅動開發模型
在Windows的不同版本上開發的驅動程式“模型”(模型這個詞語應該來源於單詞“Mode”。在Windows NT上,驅動程式被稱為Kernel Driver Mode驅動程式。筆者認為這個Mode是指一種驅動程式的結構和運作的規範),有過不同的名稱。比如在Windows 9x上的驅動程式,都叫做VXD,而在Windows NT上的驅動程式被稱為KDM驅動程式,Windows 98~2000這個時期出現的新模型叫做WDM。
Windows的驅動模型概念,本來是就驅動程式的行為而言的。比如WDM驅動,必須要滿足提供n種被要求的特性(如電源管理、即插即用)才被稱為WDM驅動。如果不提供這些功能,那麼統一稱為NT式驅動。同樣的,WDF驅動也有它的一系列規範。
但是本書採用簡單的區分方法。將一切在Windows 2000~Windows Vista下能正常運作且未呼叫WDF相關的核心API函式的驅動都稱為傳統型驅動(包括NT式和WDM)。如果呼叫了WDF相關的核心API則稱為WDF驅動。
請注意:WDF驅動是可以呼叫傳統型驅動所呼叫的核心API的,WDF可以視為傳統型的升級版。
模型的發展並不是和作業系統版本的升級齊步走的,而是有一個逐漸替代的過程。比如Windows 98已經支援部分的WDM驅動程式,但是又支援一部分的VXD驅動。而到了Windows 2000,則VXD這種驅動程式完全被淘汰了。KDM則是WDM的前身。WDM是在KDM的基礎上增加了一些新的特性,制定了一些新的規範而造就的。絕大部分函式呼叫都是通用的。當然,Windows 9x系列的核心完全不同,所以VXD與之相比,就沒有一個核心API函式是一樣的。
故而隨著Windows 9x的失寵,VXD難逃徹底被淘汰的命運。Windows NT則發展成了後來的Windows版本,KDM也變成了WDM而存在下來。當然,微軟不會閒著,現在又推出了新的WDF。讀者又不得不擔心:本書是用WDM寫的還是用WDF寫的呢?會不會剛剛學完又被淘汰呢?
和VXD不同,從KDM到WDM再到WDF是一脈相承的,基本上KDM程式設計師在學習WDM時已經佔盡了便宜。到WDF也不例外,WDF與其說是新的驅動開發模型,還不如說是在已有的核心API和資料結構的基礎上,又封裝出一套讓使用者覺得更簡單、更易用的以Wdf-開頭的一組API。因此,讀者大可不必擔心WDF的發展會讓前面學習傳統型驅動的努力付之東流。一個典型的例子是:大約在1991年到1992年間釋出首個版本的硬碟上層過濾diskperf的程式碼,18年過去了,今天依然可以編譯並正常在最新版本的Vista上執行。
本書對於大部分無法找到WDF例項的章節,都採用了傳統型驅動進行說明。比如磁碟過濾、檔案系統過濾和網路中間層驅動。此外為了從簡單入手,對於入門級的兩個例子(串列埠和鍵盤)也使用了傳統型驅動。但是虛擬磁碟和虛擬網路卡(第5章和第11章),使用了WDF版本的例子,請讀者注意識別。
Windows的驅動模型概念,本來是就驅動程式的行為而言的。比如WDM驅動,必須要滿足提供n種被要求的特性(如電源管理、即插即用)才被稱為WDM驅動。如果不提供這些功能,那麼統一稱為NT式驅動。同樣的,WDF驅動也有它的一系列規範。
但是本書採用簡單的區分方法。將一切在Windows 2000~Windows Vista下能正常運作且未呼叫WDF相關的核心API函式的驅動都稱為傳統型驅動(包括NT式和WDM)。如果呼叫了WDF相關的核心API則稱為WDF驅動。
請注意:WDF驅動是可以呼叫傳統型驅動所呼叫的核心API的,WDF可以視為傳統型的升級版。
模型的發展並不是和作業系統版本的升級齊步走的,而是有一個逐漸替代的過程。比如Windows 98已經支援部分的WDM驅動程式,但是又支援一部分的VXD驅動。而到了Windows 2000,則VXD這種驅動程式完全被淘汰了。KDM則是WDM的前身。WDM是在KDM的基礎上增加了一些新的特性,制定了一些新的規範而造就的。絕大部分函式呼叫都是通用的。當然,Windows 9x系列的核心完全不同,所以VXD與之相比,就沒有一個核心API函式是一樣的。
故而隨著Windows 9x的失寵,VXD難逃徹底被淘汰的命運。Windows NT則發展成了後來的Windows版本,KDM也變成了WDM而存在下來。當然,微軟不會閒著,現在又推出了新的WDF。讀者又不得不擔心:本書是用WDM寫的還是用WDF寫的呢?會不會剛剛學完又被淘汰呢?
和VXD不同,從KDM到WDM再到WDF是一脈相承的,基本上KDM程式設計師在學習WDM時已經佔盡了便宜。到WDF也不例外,WDF與其說是新的驅動開發模型,還不如說是在已有的核心API和資料結構的基礎上,又封裝出一套讓使用者覺得更簡單、更易用的以Wdf-開頭的一組API。因此,讀者大可不必擔心WDF的發展會讓前面學習傳統型驅動的努力付之東流。一個典型的例子是:大約在1991年到1992年間釋出首個版本的硬碟上層過濾diskperf的程式碼,18年過去了,今天依然可以編譯並正常在最新版本的Vista上執行。
本書對於大部分無法找到WDF例項的章節,都採用了傳統型驅動進行說明。比如磁碟過濾、檔案系統過濾和網路中間層驅動。此外為了從簡單入手,對於入門級的兩個例子(串列埠和鍵盤)也使用了傳統型驅動。但是虛擬磁碟和虛擬網路卡(第5章和第11章),使用了WDF版本的例子,請讀者注意識別。
本文摘自《寒江獨釣:Windows核心安全程式設計》
發展過程:NT式驅動-》WDM驅動-》WDF驅動
相關文章
- Windows驅動開發入門Windows
- 領域模型驅動開發(1)模型
- InfoQ:模型驅動開發在哪裡成功了?模型
- Java開發中的事件驅動模型例項詳解Java事件模型
- [Windows驅動開發](一)VS2008搭建windows驅動編譯環境Windows編譯
- Windows驅動開發入門 -- 理清基本概念Windows
- 領域模型驅動開發(2)-工程結構的調整模型
- 15種你應該使用模型驅動開發MDD的理由模型
- 使用Jdon Framework進行模型驅動軟體開發Framework模型
- LeaRun模型驅動開發框架 重塑企業生產力模型框架
- 抱怨驅動開發
- 驅動開發:配置Visual Studio驅動開發環境開發環境
- Windows NT 裝置驅動程式開發基礎(1) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(3) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(2) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(4) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(5) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(7) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(6) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(8) (轉)Windows
- 驅動開發:探索DRIVER_OBJECT驅動物件Object物件
- 談“測試驅動的開發”
- 基於WDF的驅動開發
- 【敏捷開發】驅動測試開發敏捷
- 驅動開發入門
- 白痴驅動開發方法
- "測試"驅動開發
- 用C++進行Windows驅動開發的一些進展C++Windows
- Redis 中的事件驅動模型Redis事件模型
- 模型驅動軟體開發 打造企業數字化未來模型
- 測試驅動開發(TDD)的思考
- 功能驅動開發FDD的探討
- Struts2的屬性驅動與模型驅動的區別模型
- 驅動開發書籍大全
- 驅動程式開發步驟
- 行為驅動開發iOSiOS
- window驅動開發總結
- Windows驅動程式框架Windows框架