MSDN Kernel-Mode Driver Architecture学习笔记(2)——Windows Driver Model (2)

随学随记,暂时未经编程验证 Written by HOOK_TTG(Jamie Jiang)

3、            设备配置和分层的驱动程序

对于大多数种类的设备,Windows驱动程序工具包(WDK)都提供了一套全功能系统驱动程序样例。其中一些个别驱动程序样例可以作为要新开发的同类设备程序的参考模型。不管怎样,系统的驱动程序都有一个额外的设计要求:让开发新的设备驱动程序简单化。所以,许多系统驱动程序都有一个分层的架构,方便开发新的同类驱动可以重利用。

大多数情况下,WDK提供的可重利用的驱动程序都是WDM驱动程序,这些WDM驱动程序支持PnP,并且为系统提供的特定设备的低级(PnP bus)驱动程序处理一些硬件无关的操作。还有一些情况,比如并行端口和SCSI端口驱动程序,他们的可重用驱动程序代码还支持高级的特定设备类型的类型驱动程序。要注意的是,没有一个系统可重用的驱动程序会妨碍新开发的中间级驱动程序加入到当前存在的驱动程序链中。

一个新的(或者替换的)驱动程序在设备的驱动程序链中是否有合适的位置,一方面取决于在特定Windows平台中设备的硬件配置,还有一方面取决于这个新的驱动程序能从当前存在的系统驱动程序中获得多少支持。

体验设备和驱动程序的配置

下面使用图表来阐述硬件与驱动程序配置之间的关系,以键盘和鼠标设备为例。其他设备可能与这不同。更多关于任意设备配置的信息,参看WDK中的设备描述文档。

下面显示了键盘和鼠标两种可能的两种硬件配置:

n  每个设备都直接连接在系统总线上。

n  两者都通过一个键盘和辅助设备控制器连接到系统总线上。

two possible hardware configurations for the keyboard and mouse devices

键盘和鼠标的硬件配置

下图描述了处理上图中设备的I/O操作的相对应的分层的驱动程序。

         illustrates the corresponding layered drivers

键盘和鼠标驱动程序的层次

需要主要的是,键盘和鼠标设备的驱动程序,不管具有什么样的硬件配置,都可以使用系统的键盘类型和鼠标类型驱动程序来处理硬件无关的操作。这些驱动程序被称之为 class drivers(类型驱动程序),因为他们每个都为特定的设备类型提供系统必须的但却硬件无关的支持。

相应的 port driver(端口驱动程序)会实现设备特有的支持功能,以在每个物理设备上完成被请求的I/O操作。基于X86平台系统的(i8042)键盘和辅助设备端口驱动程序会管理设备特有的操作,这些设备包括鼠标和键盘。在分别连接有设备的硬件配置中,就像图中所显示的键盘和鼠标的硬件配置,每个系统类型驱动程序可以层叠在各自的设备特有端口驱动程序之上;或者就是一个单独的驱动程序,这个驱动程序实现了完整的低级驱动程序。

一个新的中间驱动程序,就像一个PnP过滤驱动程序一样,可以加入到图中所示的键盘和鼠标驱动程序分层的配置中。例如,一个在键盘类型驱动程序上加入的过滤驱动程序,可以在向子系统传递I/O服务之间,过滤键盘的输入。这样的过滤驱动程序必须能像键盘类型驱动程序那样识别一样的IRPsIOCTLs

在增加驱动程序时要考虑的要点

在设计一个内核模式驱动程序时,要时刻记住以下几点:

n  不能替换系统提供的SCSI和视频端口驱动程序。

n  一个替换的低级驱动程序必须实现它所替换驱动程序的一样的功能。例如,一个替换的键盘或者鼠标端口驱动程序,必须在它自己与它所要重用的系统提供的类型驱动程序之间使用系统定义的接口。

n  一个新的中间驱动程序,要被插入到任何一对系统提供的驱动程序之间,所以必须能与那些驱动程序互操作,从而保证在其上或者其下层的驱动程序的功能不被减少。

4、            WDM的版本

尽管微软Windows2000和最新的基于NT技术的操作系统,Windows 98Windows Me除外,都支持WDM的各种不同的版本,但是对WDM的一些增加部分将导致只有最新发行的操作系统才能支持这些增加的特征,早些版本的操作系统却无法支持。较新版本的WDM通常支持早些版本WDM的所有特征,换句话说,每个新版本的WDM都是前一个版本WDM的超集。如果可能的话,一个跨系统的驱动程序应该支持任何操作系统上最低版本的WDM

检测WDM的版本

一个跨系统的WDM驱动程序应该使用IoIsWdmVersionAvailable例程来检测系统所支持的WDM版本。IoIsWdmVersionAvailable例程的参考页面有WDM版本号列表。

WDM版本之间的不同点

确保跨系统兼容的最简单方法就是写一个仅支持最小版本WDM特征的驱动程序。然而这种方法并不是总好使。有时,驱动程序需要加入一些代码,这些代码要用到较新版本WDM才有的特征,或者是为了抵消windows操作系统之间的差异。

         驱动程序支持例程间的不同

WDK中关于每个驱动程序支持例程的参考页面中,指出了这些例程是否仅被特定版本的WDM所支持,或者在不同的操作系统版本中他们的行为是否会有不同。在一个跨系统驱动程序中使用任何一个驱动程序支持例程前,必须明白这些例程的行为以及对WDM版本的限定。

在即插即用中的不同

下面的即插即用 I/O请求包(IRP)只有Windows2000和较新的基于NT技术的操作系统才支持(WDM版本 1.10或者更高):

IRP_MN_SURPRISE_REMOVAL

另外,下面的IRPsWindows98/Me和在基于NT技术的操作系统上的作业是不一样的:

IRP_MN_STOP_DEVICE

IRP_MN_REMOVE_DEVICE

IRP_MN_QUERY_REMOVE_DEVICE

在电源管理上的不同

下面的电源管理函数和I/O请求在Windows98/Me和基于NT技术操作系统上的操作时不同的:

PoSetPowerState

PoRequestPowerIrp

PoRegisterDeviceForIdleDetection

IRP_MN_QUERY_POWER

IRP_MN_SET_POWER

在完成电源IRPs的时候,Windows98/Me上的驱动程序必须在IRQL=PASSIVE_LEVEL级别上完成电源IRPs,而在基于NT技术的操作系统上可以在IRQL=PASSIVE_LEVEL或者IRQL=DISPATCH_LEVEL级别上完成这些IRPs

Windows98/Me操作系统或者基于NT技术的操作系统上,DEVICE_OBJECT结构中DO_POWER_PAGABLE标志的使用也是不同的。

内核模式驱动程序操作上的不同

对于Windows98/Me的内核模式驱动程序必须遵照下面的指导方针,使用浮点数操作、MMX3DNOW!或者英特尔的SSE扩展。更多的信息参看MSDNUsing Floating Point or MMX in a WDM Driver章节。

Windows98/Me提供了固定数目的工作线程,这个数目对相当多的驱动程序是不够的。

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值