Windows 7驱动开发系列(四)--WDM模型介绍

    有关WINDOWS DRIVER的模式还有一个很重要的概念就是WDM模型,一般来说内核模式的驱动都要遵守WDM(除了某些需要支持WIN2000的驱动以外)那么什么是WDM呢?它是一套规则:

1.需要在头文件当中包含wdm.h而不是ntddk.h

2.一般来说WDM的驱动就被为(也就层级的概念)总线驱动,filter驱动,和功能驱动。(后面会说到他们之间的关系)

3.按WDM的规则来声明WDM OBJECT和DEVICE STACK。

4.支持PNP

5.支持电源管理

接下来就是什么时候使用WDM的问题了,这里面微软说的很清楚,一般来说新开发的驱动都要遵守WDM的规则。除非某些历史遗留的问题。当然我们后面讨论内核模式的驱动默认都是WDM的。NTDDK的就不说了,用得已经太少了。

    下面咱们来介绍一下三种类型的WDM的驱动

1.BUS DRIVER(总线驱动)总线驱动是要直接面对IO和卡曹的。也需要检测子设备的接入也就是枚举BUS上的设备,另外还要对PNP的请求进行响应。

2.FUNCTION DRIVER(功能驱动)这是一个驱动的主要部分也就是主要实现功能的部分了。对设备进行读写操作和电源管理。

3.FILTER DRIVER这个比较难翻译,但是他的功能比较明显就是过滤分发和加工请求的。

我们来看这个架构图。

首先这个图当中返回用虚线画的圈都不是必备的层,在这里我们看到最底层就是BUS层了,它负责与IO打交道,上面对他的BUS请求进行过滤加工,然后给到底层的FILTER进行加工与过滤接下来给FUNCTION DRIVER进行功能实现。然后再发给更上层的FILTER进行处理。

接下来咱们举一个例子看一下。

比如这个例子当中在USB HUB上接入了N个设备,那么按照咱们上面说的,USB的HUB就需要枚举它上面的设备属于BUS DRIVER,而PCI BUS驱动也肯定属于BUS DRIVER。而USB上面的设备那个JOYSTICK它属于HID设备(HUMAN INPUT DEVICE)也就是人体输入设备他可以有现成的HID CLASS DRIVER的DLL来支持实现FUNCTION DRIVER的功能。

 

posted @ 2010-10-03 21:24  javawebsoa  Views(382)  Comments(0Edit  收藏  举报