Windows驱动开发VXD/WDM/WDF/DDK/WDK的联系和区别

背景介绍

首先,先从基础的东西说起,做任何程序的开发,你都需要一个配套的开发套件,专业术语叫做SDK(Software Development Kit,软件开发套件)。比如:开发JAVA程序,我们可能需要一个JDK。那么,开发WINDOWS应用程序,我们同样需要WINDOWS的SDK。而想要开发WINDOWS下的驱动程序,我们则需要一个DDK/WDK。

具体概念

OK,下面来具体谈谈VXD/WDM/WDF/DDK/WDK到底是些什么东东。这个就要从驱动程序的的一些历史开始说起了:

  1. 95/98/ME下,Windows的驱动模型为VXD(Virtual X Driver,虚拟设备驱动程序),开发出来的驱动文件扩展名为*.vxd。相关资料可以看《编程高手箴言》的前几个章节,里面有很详细的介绍,虽然这个东西已经过时,但大概看看还是会增长见识的。VxD程序是Windows 9x特有的,它在Windows NT下不能运行。所以如果你的程序是依靠VxD的,它就不能被移植到Windows NT平台上去。
  2. 2000/XP/2003下,升级为WDM驱动模型(Windows Driver Model),WDM驱动框架比较复杂,编程难度大,初学者难以掌握,仍然不是最理想的模型。WDM模型下对应的驱动开发包叫做DDK(Driver Develop Kit),开发出来的驱动文件扩展名则升级为*.sys。
  3. Vista及以后版本,进一步升级为WDF驱动模型(Windows Driver Foundation),WDF模型在WDM模型的基础上进行简化,提供了面向对象和事件驱动的驱动程序开发框架,大大降低了开发难度。自此,掌握Windows设备驱动程序的开发人员,由过去的“专业人士”变成了“普通大众”。WDF驱动程序包括两个类型,一个是内核级的,称为KMDF(Kernel-Mode Driver Framework),为SYS文件;另一个是用户级的,称为UMDF(User-Mode Driver Framework),为DLL文件。WDF模型下对应的开发包则叫做WDK(Windows Driver Kit),开发出来的驱动文件扩展名仍然是*.sys。其实WDK可以看做是DDK的升级版本,现在一般的WDK是包含以前DDK相关的功能,现在XP下也可以用WDK开发驱动,WDK能编译出2000-2008的各种驱动。

开发DDK和WDK的区别

DDK是基于WDM驱动模型的,而WDK是基于WDF驱动模型的。WDM驱动模型和WDF驱动模型的最大的区别是:

  1. WDF驱动框架对WDM进行了一次封装,WDF框架就好像C++中的基类一样,且这个基类中的model,IO model,pnp和电源管理模型;且提供了一些与操作系统相关的处理函数,这些函数好像C++中的虚函数一样,WDF驱动中能够对这些函数进行override;特别是Pnp管理和电源管理!基本上都由WDF框架做了,而WDF的功能驱动几乎不要对它进行特殊的处理;

  2. WDF驱动采用队列进行IO处理,而WDM中将所有的IO操作都用默认的队列进行处理,如果要进行IRp同步,必须使用StartIO;

  3. WDF是面向对象的,而WDM是面向过程的,WDF提供对象的封装,如将IRP封装成WDFREQUEST,对象提供方法和Event。

发布了165 篇原创文章 · 获赞 760 · 访问量 158万+

猜你喜欢

转载自blog.csdn.net/LEON1741/article/details/87254038