存储类驱动程序简介

存储 驱动程序使用众所周知的 SCSI 类 (/端口接口,在系统提供存储端口驱动程序(当前为 SCSI、IDE、USB 和 IEEE 1394) )的任何总线上控制其类型的大容量存储设备。 存储设备连接到的特定总线对存储类驱动程序是透明的。

任何存储类驱动程序都通过生成 SCSI 请求块 (SMB) (包含命令描述符 块 ( CDB) )来处理来自用户应用程序或更高级别驱动程序的 I/O 请求,并通过任何干预筛选器驱动程序将其发送到基础存储端口驱动程序。

存储类驱动程序不提供 SRB 中的寻址信息。 相反,端口驱动程序 (或更低的驱动程序) 负责任何所需的寻址。 存储端口驱动程序将 SMB 转换为基础主机总线适配器 (HBA) (可能是 SCSI 或 1394 主机总线适配器、IDE 控制器或其他此类硬件)所需的格式,并向设备发出命令。 在 WDK Windows驱动程序工具包 (中) "HBA"一词代表任何此类基础适配器或控制器。

对于 I/O 管理器以及位于存储类驱动程序之上的任何更高级别驱动程序,大多数存储类驱动程序都是标准内核模式中间驱动程序。 因此,每个类驱动程序必须具有 DriverEntry 例程、AddDevice 例程、Unload 例程、一个或多个 IoCompletion 例程,以及 DispatchPnPDispatchPower 例程来处理 即插即用 和电源 IIP。

存储类驱动程序还必须具有 DispatchSystemControl 例程来处理系统控制 IRP,并且可以具有驱动程序设计器确定的其他任何标准更高级别的驱动程序例程,例如 StartIo 例程。 有关系统控制和标准内核模式驱动程序例程详细信息,请参阅 标准驱动程序例程

对于 PnP 管理器,存储类驱动程序是函数驱动程序,即驱动单个设备的驱动程序。 存储类驱动程序还可以充当总线 驱动程序,枚举其设备的子设备。 例如,分区媒体设备(如磁盘)的类驱动程序返回表示其分区的 PDU 列表。 每个此类 PDO 都可以作为目标设备寻址,并且由其自己的类驱动程序提供服务。

注意

应实现 SCSI 设备(如打印机或扫描仪)的驱动程序,如本部分中所述。 此类 SCSI 设备的驱动程序使用相同的 SCSI 类/端口接口来控制其设备,并承担处理 IP、生成 SRB 并将其发送到基础端口驱动程序的责任,就像存储设备的驱动程序一样。