Windows的驱动开发模型,Windows驱动开发入门指引

   1.  前言

Windows的驱动开发模型

Windows的驱动开发模型,Windows驱动开发入门指引。 

事先并未做过驱动开发,一切从〇初始。陆陆续续看了些书,windows设备驱动程序wdf开发等。但是接连云里雾里的。所以想一点一点的积累下在使得方面的学识。

因工作上项目标须要,小编须求做驱动相关的支付,从前并不曾接触过有关的学识,折腾一段时间下来,功效如需兑现了,也积累了部分经验和观点,所以在此做番统计。

 

1. Framework Object Model

图片 1

率先作者将记录下怎样搭建调试环境?前提是wmware已装完成,已有两台guest os.
(xp 和win7)。上面针对两类系统的调剂进行验证。

对此驱动开发的支付指导,微软官方文档网站已经提供了很详细的教程文档,并且在Github上提供了一名目繁多典型的例程源码用于开发人士参考。开发人员在有着一定的驱动概念知识后,通过参考官方例程可以很不难落成全体一定效用的驱动应用程序。

   
在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 三千~Windows
Vista下能健康运作且未调用WDF相关的内核API函数的驱动都叫作守旧型驱动(包含NT式和WDM)。倘使调用了WDF相关的内核API则号称WDF驱动。
请留意:WDF驱动是足以调用古板型驱动所调用的内核API的,WDF可以说是传统型的升级版。
   
模型的升华并不是和操作系统版本的晋级齐步走的,而是有1个渐渐取代的经过。比如Windows
98已经资助部分的WDM驱动程序,可是又帮助部分的VXD驱动。而到了Windows
两千,则VXD这种驱动程序完全被淘汰了。KDM则是WDM的前身。WDM是在KDM的根基上增添了有的新的天性,制定了有的新的规范而培养的。绝大多数函数调用都是通用的。当然,Windows
9x种类的基业完全差别,所以VXD与之相比较,就平素不3个内核API函数是一致的。
    故而随着Windows 9x的打入冷宫,VXD难逃彻底被淘汰的命局。Windows
NT则发展成了后来的Windows版本,KDM也化为了WDM而留存下来。当然,微软不会闲着,以往又推出了新的WDF。读者又不得不担心:本书是用WDM写的依然用WDF写的啊?会不会刚刚学完又被淘汰呢?
   
和VXD不一致,从KDM到WDM再到WDF是一脉相传的,基本上KDM程序员在上学WDM时曾经占尽了便宜。到WDF也不例外,WDF与其说是新的驱动开发模型,还不如说是在已有的内核API和数据结构的底蕴上,又装进出一套让使用者觉得更简明、更易用的以Wdf-开端的一组API。因而,读者大可不必担心WDF的上扬会让后面学习古板型驱动的极力半涂而废。一个超人的例证是:大致在一九九五年到1995年间发布首个本子的硬盘上层过滤diskperf的代码,18年过去了,前日照例可以编译并寻常在风行版本的Vista上运转。
   
本书对于大部分无法找到WDF实例的章节,都采取了古板型驱动举行认证。比如磁盘过滤、文件系统过滤和互连网中间层驱动。别的为了从简单入手,对于入门级的多少个例子(串口和键盘)也使用了古板型驱动。不过虚拟磁盘和虚构网卡(第⑥章和第壹1章),使用了WDF版本的事例,请读者注意识别。

2. KMDF程序结构

KMDF属于即插即用驱动程序的驱动模型:

1.一个DriverEntry例程。

2.一个EvtDriverDeviceAdd例程,类似于WDM的AddDevice例程。

3.三个或多个IO队列。

4.2个活多少个IO事件回调例程,类似于WDM的DispatchXxx。

5.帮忙的即插即用和电源管理回调例程。

6.支撑的WMI回调例程,用于管理统计机系列

7.其余回调例程,如目的的排除例程、中断处理例程、DMA例程。

 

  • 本着xp驱动调试的设置(参考:)

Windows驱动程序入门:

使得开发最好使用vmware虚拟机,好处不多说了。首先针对vmware虚拟机的装置(保险虚拟机是关机状态)

Github:

1.
装置VM与Windbg通讯的串口

 

开辟目标连串的**Virtual
Machine Setting选项,在Hardware中添加新硬件:1)接纳Serial
Port;2)serial
Port Type 采纳“Output
to named pipe”;3)Specify
Socket的选项如图1吗;4)最终的布置结果如图2所示。然后运维VM的对象连串啊。**

   2.  驱动类型

注意事项:一般景况下是串口2:Serial Port
2,原因是暗中认可VM安装虚拟打印机占用Serial Port
1.

 驱动分为如下三种档次:

图片 2 

> > 图1

图片 3

> > 图2