談WDM與WDF (windows驅動開發)

轉載自http://yinaiyun52.blog.163.com/blog/static/36251574200826112436776/html

WDF驅動模型框架

如所周知,自Windows 2000開始,開發驅動程序必以WDM爲基礎的,但其開發難度之大,根本不能奢望像用戶模式應用程序開發那樣容易。爲改善這種局面,微軟推出了新的驅動程序開發環境。要預先指出的是,這不是另起爐竈改弦更張,而是以WDM爲基礎進行了建模和封裝,顯著特色是下降了開發難度。由於:函數

一、   將原來普通程序設計中基於對象的技術應用到了驅動開發中。WDM中雖也有對象模型,但與真正的基於對象技術根本就不是一回事。爲了實現基於對象的技術,微軟精心設計了對象模型並進行了封裝。屬性、方法、事件等等「一個都不能少」。工具

二、   不管內核模式的驅動程序或者用戶模式的驅動程序,都採用同一套對象模型構建,採用同一個基礎承載。這個基礎就是WDF。WDF雖然已是通過封裝和定義的對象模型,但對內核模式和用戶模式對象來講,WDF又是二者的父對象。換言之二者都是繼承了WDF才獲得的,或者都是從WDF派生而來的。相對於內核模式,派生出的對象稱爲「KMD框架」即KMDF;相對於用戶模式,派生出的模型稱爲「UMD框架」即UMDF。不管何種模式的框架,其內部封裝的方法、執行的行爲其實仍是用WDM完成的。學習

三、   更重要的,也是微軟反覆炫耀的是封裝了驅動程序中的某些共同行爲:例如即插即用和電源管理就屬於這種共同行爲。由於大多數驅動程序中都須要處理即插即用和電源管理問題,聽說這大概要上千行的代碼,何況,沒有至關水平還不必定能處理好。爲了一勞永逸,WDF乾脆將即插即用和電源管理封裝了進了對象以內,一舉成了對象的缺省(默認)行爲。測試

四、   改變了操做系統內核與驅動程序之間的關係,WDM驅動程序中,一方面要處理硬件,另外一方面要處理驅動程序與操做系統內核的交互。如今WDF則將驅動程序與操做系統內核之間進行了分離,驅動程序與操做系統交互工做交給框架內封裝的方法(函數)完成,這樣驅動開發者只需專一處理硬件的行爲便可。這不只避免了顧此失彼兩面不周的弊端,也因爲雙方的分離,對操做系統內的某些改動,硬件製造商配套驅動程序的開發都有莫大的好處。ui

五、   兩種模式的驅動程序(KMDF、UMDF)都使用同一環境進行構建,這一環境稱爲WDK。
    即KMDF,UMDF的開發環境爲WDK。
Windows Device Kit (WDK): 把測試套件(test suites)集成進來,DDK 就成了WDK。WDK是針對微軟操做系統系列的驅動器集成開發系統。它組合了Windows DDK和Hardware Compatibility Test (HCT) kits(硬件兼容性測試工具),同時提供了微軟內部用來測試Windows操做系統穩定性和可靠性的測試套件。操作系統

六、   雖然通過封裝並引入基於對象的技術,所開發的驅動程序在執行效率上並不比原來遜色。設計

WDF和WDM的關係有點相似於MFC和Windows SDK的關係。WDF只是在WDM上面加了一層,來簡化driver的開發,特別是PNP,power和IO cancellation 等幾個方面有很大改進。code

如今學習WDF最好的資料仍是DDK帶的sample code。WHDC有一些資料:

http://www.microsoft.com/whdc/driver/wdf/default.mspx

其中Windows Driver Foundation: A Syllabus [175 KB Word document] 列出了不少有用資料。至於移植,請參看 How to Port WDM Drivers to KMDF [749 KB]

關於WDF的書目前只有兩本:一本是微軟的,一本是OSR的。內容差很少,MS的這個月才發佈,OSR還只能pre-order. 中文資料目前尚未

http://www.microsoft.com/MSPress/books/10512.aspx

http://www.osr.com/wdfbook.shtml

相關文章
相關標籤/搜索