存储类驱动程序简介
存储类驱动程序使用完善的 SCSI 类/端口接口来控制系统提供存储端口驱动程序的任何总线上的大容量存储设备, (当前 SCSI、IDE、USB 和 IEEE 1394) 。 存储设备连接到的特定总线对存储类驱动程序是透明的。
任何存储类驱动程序都处理来自用户应用程序或更高级别驱动程序的 I/O 请求,方法是生成 SCSI 请求块 (SDB) 包含 命令描述符块 (CDB) ,并通过任何干预筛选器驱动程序将它们发送到基础存储端口驱动程序。
存储类驱动程序不提供 SRB 中的寻址信息。 相反,端口驱动程序 (或仍然较低的驱动程序) 负责所需的任何寻址。 存储端口驱动程序将 SDB 转换为基础主机总线适配器 (HBA) (可以是 SCSI 或 1394 主机总线适配器、IDE 控制器或其他此类硬件)所需的格式,并向设备发出命令。 在 Windows 驱动程序工具包 (WDK) 中,术语“HBA”表示任何此类基础适配器或控制器。
对 I/O 管理器和存储类驱动程序之上的任何更高级别驱动程序而言,大多数存储类驱动程序都是标准内核模式中间驱动程序。 因此,每个类驱动程序都必须具有 DriverEntry 例程、AddDevice 例程、Unload 例程、一个或多个 IoCompletion 例程以及 DispatchPnP 和 DispatchPower 例程来处理即插即用和电源 IRP。
存储类驱动程序还必须具有 DispatchSystemControl 例程来处理系统控制 IRP,并且可以具有任何其他标准更高级别的驱动程序例程,例如由驱动程序设计器确定的 StartIo 例程。 有关系统控制和标准内核模式驱动程序例程的详细信息,请参阅 标准驱动程序例程。
对于 PnP 管理器,存储类驱动程序是 函数驱动程序,即驱动单个设备的驱动程序。 存储类驱动程序还可以充当 总线驱动程序,枚举其设备的子设备。 例如,分区媒体设备的类驱动程序(例如磁盘)返回表示其分区的 PDO 列表。 每个此类 PDO 都可以作为目标设备进行寻址,并由其自己的类驱动程序提供服务。
注意
应按照本部分所述实现 SCSI 设备(如打印机或扫描仪)的驱动程序。 此类 SCSI 设备的驱动程序使用相同的 SCSI 类/端口接口来控制其设备,并且与存储设备的驱动程序一样,负责处理 IRP、生成 SRB 并将其发送到基础端口驱动程序。