日期:2009-04-27  浏览次数:20537 次

  目前,由于需要支持新的业务和新的PC外部设备类型对驱动程序开发造成了新的挑战。新型总线增加了设备的数量和对设备驱动程序的需求。设备上各种功能的不断增加使驱动程序的开发变得越来越复杂。同时,快速反应的交互式应用程序要求将软件和硬件紧密的结合在一起。1997年,在用于Windows 95和Windows NT的统一的Win32驱动程序模型(WDM)有了进一步的发展,将这些因素全部考虑在内。WDM允许使用一个单一的驱动程序源(x86二进制)来同时在Windows 95和Windows NT中实现对新的总线和新设备的支持。

  WDM的关键目标是通过提供一种灵活的方式来简化驱动程序的开发,使在实现对新硬件支持的基础上减少并降低所必须开发的驱动程序的数量和复杂性。WDM还必须为即插即用和设备的电源管理提供一个通用的框架结构。WDM是实现对新型设备的简便支持和方便使用的关键组件。

  为了实现这些目标,WDM只能以Windows NT I/O子系统提供的一组通用服务为基础。WDM改进了由一组核心扩展构成的功能实现对即插即用、设备电源管理、和快速反应I/O流的支持。除了通用的平台服务和扩展外,WDM还实现了一个模块化的、分层次类型的微型驱动程序结构。类型驱动程序实现了支持通用总线、协议、或设备类所需的功能性接口。类驱动程序的一般特性是为逻辑设备的命令设置、协议、和代码重用所需的总线接口实现标准化提供必要的条件。WDM对标准类接口的支持减少了Windows 95和Windows NT所需的设备驱动程序的数量和复杂性。

  微型驱动程序允许通用类驱动程序的扩展实现对特定设备协议或物理编程接口的支持。例如,一个微型驱动程序可以被用于实现对IEEE 1394总线类驱动程序的扩展,用于对特定主机控制器编程接口的支持。微型驱动程序非常易于开发,因为它们可以通过简单的扩展通用的类驱动程序接口功能来实现。尽管微型驱动程序设计简便,但是重复使用微型驱动程序模块所带来的优点也可以通过对标准设备编程接口的支持来实现。USB主机控制器接口(OpenHCI或UHCI)就是这方面的一个例子。

  模块化的WDM体系结构灵活统一的接口使操作系统可以动态的配置不同的设备驱动程序模块来支持特定的设备。模块化的WDM体系结构灵活统一的接口使操作系统可以动态的配置不同的驱动程序模块来支持特定的设备。一个典型的驱动程序堆栈由通用设备、协议、和用特定协议和特定总线的微型驱动程序联接的总线类驱动程序构成。例如,操作系统可以配置一个驱动程序堆栈来支持这样一个照相机,它的命令是用图象类定义的,并且它是根据来自IEEE 1394总线类的功能控制协议(FCP)类而发表的。这种灵活性还使其可以很容易的支持一个多功能设备,仅需简单的实现一个微型驱动程序将多功能硬件与几个设备类的接口相连接。动态构造WDM驱动程序堆栈是实现即插即用设备支持的关键。

  WDM服务使实现一个用于Windows NT和Windows 95快速反应的模型成为可能。WDM提供了多个执行优先级包括核心态和非核心态线程、IRQ级别、和被延缓的程序调用(DPC)。所有的WDM类和微型驱动程序都作为核心态(第0层)的特权级线程(不会被CPU调度程序中断)执行。32个IRQ级可以被用于区分硬件中断服务的优先级。对于每个中断,DPC被排入队列等到被启用中断的IRQ服务例程完成后再执行。DPCs通过有效的减少中断被禁止的时间,使系统对中断的响应获得了很大的提高。对于使用多处理器的基于x86的PC系统,在Windows NT下对中断的支持是以Intel的多处理器规范1.4版本为基础的。

  对于需要活动的多媒体的应用程序,WDM在核心态提供了快速反应的接口来处理I/O流。WDM的流接口是通过标准的WDM类接口提供出的。对于WDM,一个多媒体流完全可以用一个或多个软件过滤器和设备驱动程序来处理。为了加速对I/O流的处理,WDM流可以直接对硬件进行访问,避免了由于进行非核心态和核心态之间的转换而造成的延迟,并且还省取了对中间I/O缓冲区的需要。

  要充分利用WDM提供的优点,建议你使用即插即用兼容的电源管理输入、声音、图形、和使用USB和IEEE 1394的存储外围设备。

  WDM驱动程序可以在Windows NT上与现有的Windows NT驱动程序共存,也可以在Windows 95上与现有的Windows 95驱动程序共存。现有的Windows NT 和Windows 95驱动程序将继续被支持,但是却不能使用WDM的先进优点。由微软提供的可扩展的WDM类驱动程序是支持新设备的最好选择。在开始开发一个新的WDM类驱动程序之前,硬件开发者应当请教微软公司以取得对特定设备类的支持信息。一旦有可能,就采用仅编写一次类驱动程序,然后通过使用WDM的微型驱动程序来将其扩展成针对特定硬件接口的驱动程序的方法。