谈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

相关文章
相关标签/搜索