现在Windows98 和Windows2000 已经成了主流操作系统的主流,原先用来实现驱动程序的VxD 技术随着Win95 的淡出也慢慢地将退出历史舞台,在Windows98 和Windows2000中设备驱动程序将根据Windows 驱动程序模型(WDM)来设计。WDM 通过提供一种灵活的方式来简化驱动程序的开发,在实现对新硬件支持的基础上减少并降低所必须开发的驱动程序的数量和复杂性。 WDM驱动程序设计 一.WDM简介 微软不断推出新的操作系统,现在Windows98和Windows2000已经成了主流,原先用来实现驱动程序的VxD技术随着Win95的淡出也慢慢地将退出历史舞台,在Windows98和Windows2000中设备驱动程序将根据Windows驱动程序模型(WDM)来设计。WDM通过提供一种灵活的方式来简化驱动程序的开发,在实现对新硬件支持的基础上减少并降低所必须开发的驱动程序的数量和复杂性。 Windows驱动程序模型分两个方面,除了核心模型描述设备驱动程序的标准结构外,WDM还为常见类型的设备实现了一个模块化的、分层次类型的总线驱动程序和类驱动程序。总线驱动程序实现了支持通用串行总线(USB)、IEEE1394(FireWire)协议等。类驱动程序是为实现标准Windows功能提供条件。WDM对标准类接口的支持减少了Windows 95和Windows NT所需的设备驱动程序的数量和复杂性。在Windows平台上,WDM将成为21世纪主流的驱动模式。 WDM支持USB、IEEE 1394、ACPI等全新的硬件标准。而且以往在两个平台上同时运行时需要编写两个截然不同的驱动程序,现在只需要编写一个WDM驱动程序就可以了。WDM驱动程序也是分层的,即不同层上的驱动程序有着不同的优先级,而 Windows 9x下的VxD则没有此结构。 WDM还引入了功能设备对象 FDO(Functional Device Object)与物理设备对象 PDO(Physical Device Object)两个新类来描述硬件,一个PDO对应一个真实硬件。一个硬件只允许有一个PDO,却可以拥有多个FDO,在驱动程序中直接操作的不是硬件而是相应的PDO与 FDO。在用户态和内核态通讯方面,系统为每一个用户请求打包形成一个IRP结构,将其发送至驱动程序,并通过识别 IRP中的PDO来区别是发送给哪一个设备的。另外,在驱动程序的加载方面,WDM不通过驱动程序名称识别,而是通过一个128位的全局唯一标识符 GUID来实现驱动程序的识别。我们用上图来说明设备驱动程序的分层及调用。 写 WDM和其它模式驱动程序基本上是相同的,代码中的主要区别在于如何创建设备。 在 WDM驱动程序中,即插即用(PnP...