有三种类型的 WDM 驱动程序:总线驱动程序、函数驱动程序和筛选器驱动程序。
总线驱动程序驱动单个 I/O 总线设备,并提供与设备无关的每个插槽的功能。 总线驱动程序还会检测和报告连接到总线的子设备。
函数驱动程序驱动单个设备。
筛选器驱动程序筛选设备、设备类或总线的 I/O 请求。
在此上下文中,总线 是用于连接其他物理、逻辑或虚拟设备的任意设备。 总线包括传统总线(如 SCSI 和 PCI),以及并行端口、串行端口和 i8042 端口。
对于驱动程序开发人员来说,了解不同类型的 WDM 驱动程序并了解他们正在编写的驱动程序类型非常重要。 例如,驱动程序是否处理每个 即插即用 IRP 以及如何处理此类 IRP 取决于正在写入的驱动程序类型(总线驱动程序、函数驱动程序或筛选器驱动程序)。
下图显示了设备总线驱动程序、函数驱动程序和筛选器驱动程序之间的关系。
每个设备通常都有父 I/O 总线的总线驱动程序、设备的函数驱动程序,以及设备的零个或多个筛选器驱动程序。 需要许多筛选器驱动程序的驱动程序设计不会产生最佳性能。
上图中的驱动程序是以下类型:
总线驱动程序为总线控制器、适配器或桥提供服务。 公交车司机是必需的驾驶员;每种类型的公交车都有一个司机。 Microsoft为大多数常见总线提供驱动程序。 IHV 和 OEM 可以提供其他总线驱动程序。
总线筛选器驱动程序通常向总线添加值,并由Microsoft或系统 OEM 提供。 总线可以有任意数量的总线筛选器驱动程序。
较低级别的筛选器驱动程序 通常修改设备硬件的行为。 它们是可选的,通常由 IHV 提供。 设备可以有任意数量的较低级别的筛选器驱动程序。
函数驱动程序是设备的主要驱动程序。 函数驱动程序通常由设备供应商编写,并且是必需的(除非设备在 原始模式下使用)。
高级筛选器驱动程序 通常为设备提供增值功能。 它们是可选的,通常由 IHV 提供。
以下主题详细介绍了三种常规类型的 WDM 驱动程序(总线驱动程序、函数驱动程序、筛选器驱动程序)。 还包括使用示例 USB 驱动程序的 WDM 驱动程序分层示例。