转载自http://yinaiyun52.blog.163.com/blog/static/36251574200826112436776/

WDF驱动模型

如所周知,自Windows 2000开始,开发驱动程序必以WDM为基础的,但其开发难度之大,根本不能奢望像用户模式应用程序开发那样容易。为改善这种局面,微软推出了新的驱动程序开发环境。要预先指出的是,这不是另起炉灶改弦更张,而是以WDM为基础进行了建模和封装,显著特点是降低了开发难度。因为:

1、   将原来普通程序设计中基于对象的技术应用到了驱动开发中。WDM中虽也有对象模型,但与真正的基于对象技术根本就不是一回事。为了实现基于对象的技术,微软精心设计了对象模型并进行了封装。属性、方法、事件等等“一个都不能少”。

2、   无论内核模式的驱动程序或者用户模式的驱动程序,都采用同一套对象模型构建,采用同一个基础承载。这个基础就是WDF。WDF虽然已经是经过封装和定义的对象模型,但对内核模式和用户模式对象来说,WDF又是两者的父对象。换言之两者都是继承了WDF才得到的,或者都是从WDF派生而来的。相对于内核模式,派生出的对象称为“KMD框架”即KMDF;相对于用户模式,派生出的模型称为“UMD框架”即UMDF。无论何种模式的框架,其内部封装的方法、执行的行为其实还是用WDM完成的。

3、   更重要的,也是微软反复炫耀的是封装了驱动程序中的某些共同行为:例如即插即用和电源管理就属于这种共同行为。因为大多数驱动程序中都需要处理即插即用和电源管理问题,据说这大概要上千行的代码,况且,没有相当水平还不一定能处理好。为了一劳永逸,WDF干脆将即插即用和电源管理封装了进了对象之内,一举成了对象的缺省(默认)行为。

4、   改变了操作系统内核与驱动程序之间的关系,WDM驱动程序中,一方面要处理硬件,另一方面要处理驱动程序与操作系统内核的交互。现在WDF则将驱动程序与操作系统内核之间进行了分离,驱动程序与操作系统交互工作交给框架内封装的方法(函数)完成,这样驱动开发者只需专注处理硬件的行为即可。这不仅避免了顾此失彼两面不周的弊端,也由于双方的分离,对操作系统内的某些改动,硬件制造商配套驱动程序的开发都有莫大的好处。

5、   两种模式的驱动程序(KMDF、UMDF)都使用同一环境进行构建,这一环境称为WDK。
    即KMDF,UMDF的开发环境为WDK。
Windows Device Kit (WDK): 把测试套件(test suites)集成进来,DDK 就成了WDK。WDK是针对微软操作系统系列的驱动器集成开发系统。它组合了Windows DDK和Hardware Compatibility Test (HCT) kits(硬件兼容性测试工具),同时提供了微软内部用来测试Windows操作系统稳定性和可靠性的测试套件。

6、   虽然经过封装并引入基于对象的技术,所开发的驱动程序在执行效率上并不比原来逊色。

WDF和WDM的关系有点类似于MFC和Windows SDK的关系。WDF只是在WDM上面加了一层,来简化driver的开发,特别是PNP,power和IO cancellation 等几个方面有很大改进。

现在学习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

谈WDM与WDF (windows驱动开发)相关推荐

  1. 客户端开发 Windows驱动开发(1)SDK WDK DDK WDM的关系

    尽管Windows平台的SDK.DDK与WDK都包含了WinDBG工具包,但是用户获取WinDBG工具包的最主要方式还是从微软网站自由下载,因为这样获得的版本最新. 最近因为工作需要,尝试去了解WIN ...

  2. windows驱动开发-WDF编程

    文章目录 前言 WDF编程前的准备工作 WDF编程 创建驱动对象 创建设备对象 设备对象的回调函数 链表操作 驱动的测试代码 其他 前言 注:本文的完整代码见仓库 18-WDF-reflect 代码参 ...

  3. Windows驱动开发WDM (1) - 基本结构

    陆陆续续做过一些驱动的开发,但是一直以来都没有系统的学习过.这次重新阅读<windows驱动开发技术详解>(张帆,史彩成等编著),写博客记录一下,用以加深自己对驱动的理解. 驱动对象(DR ...

  4. [Windows驱动开发](一)序言

    笔者学习驱动编程是从两本书入门的.它们分别是<寒江独钓--内核安全编程>和<Windows驱动开发技术详解>.两本书分别从不同的角度介绍了驱动程序的制作方法. 在我理解,驱动程 ...

  5. c语言windows驱动编程入门,Windows驱动开发技术详解 PDF扫描版[175MB]

    Windows驱动开发技术详解由浅入深.循序渐进地介绍了windows驱动程序的开发方法与调试技巧.本书共分23章,内容涵盖了windows操作系统的基本原理.nt驱动程序与wdm驱动程序的构造.驱动 ...

  6. windows驱动开发学习

    序言]  很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资 料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从 事驱动开发时间不长也不短, ...

  7. 15、Windows驱动开发技术详解笔记(11) 基本概念

    9.Windows驱动程序的入口函数规定为_DriverEntry@8,所以用C++编写时要用extern. 驱动程序中,不能使用编译器运行时函数,甚至C语言中的malloc,C++的new函数都不能 ...

  8. Windows 驱动开发 - 5

    上篇<Windows 驱动开发 - 4>我们已经完毕了硬件准备. 可是我们还没有详细的数据操作,比如接收读写操作. 在WDF中进行此类操作前须要进行设备的IO控制,已保持数据的完整性. 我 ...

  9. windows驱动开发推荐书籍

    [作者]  猪头三  个人网站 :http://www.x86asm.com/ [序言]  很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资 料少有关系.大多学的驱动开 ...

最新文章

  1. 猫抓老鼠-Java面向对象特点梳理
  2. Linux下使用ssh密钥实现无交互备份
  3. javascript运行时问题
  4. IOS开发如何在iTunes中查看沙河下的路径
  5. 计算机组成原理指令译码,计算机组成原理实验报告指令译码器.docx
  6. mysql 线性表_线性表之顺序存储,基本操作
  7. swoole 捕捉php错误,swoole怎么处理错误
  8. python输出生日程序_Python中:利用七段数码管输出自己的生日及系统当前时间
  9. 为什么推荐做印尼tiktok?
  10. sidhu眼中的CoordinatorLayout.Behavior(一)
  11. 使用Specflow 和XUnit 进行BDD测试项目配置方法
  12. 数据--第36课 - 遍历二叉树
  13. hmcl离线模式可以联机吗_hmcl启动器怎么联机-hmcl启动器联机方法介绍
  14. 设备巡检的痛点和巡检方案
  15. sketch颜色和html颜色不一致,photoshop和sketch中图片色彩不一致的原因和解决办法...
  16. Google Play网页显示语言切换方法
  17. myrio与fpga编程_【虚拟课堂】LabVIEW与MyRIO的逐点比较法插补实现(含FPGA)
  18. IIS 动态建站--因权限问题被拒绝访问的解决方案
  19. Transact-SQL 参考
  20. MySQL之左外连接右外连接

热门文章

  1. 计算机专业求职体验报告,求职体验心得报告大合集.doc
  2. 对警报线程池的警报线程_covid 19医院网络警报的警报可访问性剖析
  3. 浅析Redis分布式锁——从自己实现到Redisson的实现
  4. 计算机数控机床工作原理,数控机床电气控制系统工作原理
  5. 科大讯飞语音转文字_使用科大讯飞语音转文字的服务进行电话录音分析
  6. LinuxC语言正则表达式使用
  7. 阶跃信号的matlab,单位阶跃信号的MATLAB实现如下: t=0:0.001:4; ft=(t>1); plot(t,ft); axis([0,4,-0.1,1.2]); title(...
  8. 中国石油大学《工程热力学与传热学》第一阶段在线作业
  9. 详解Python的pyyaml模块
  10. volatility3安装报错