Windows 存储驱动程序体系结构

适用于外围存储设备的 Windows 操作系统类和筛选器驱动程序充当层于类或筛选器驱动程序之上的任何中间或最高级别驱动程序与系统提供的端口驱动程序之间的接口。

来自用户应用程序或内核组件的 I/O 请求通过 I/O 系统服务和一个或多个中级或最高级别的驱动程序(如文件系统驱动程序)访问存储类驱动程序。 存储类驱动程序将它们获取的标准 IRP 转换为具有系统定义的 SCSI 请求块 (SRB) 包含 SCSI 命令描述符块 (CDB) 的 IRP,然后再将每个 IRP 发送到下一个较低的驱动程序。 存储端口驱动程序将类驱动程序中的 SRB 转换为特定于总线的命令,并通过 I/O 总线驱动程序以及一个或多个筛选器驱动程序发送到存储 HBA。

下图显示了 Windows 存储驱动程序的分层体系结构。

说明基于 nt 的操作系统存储驱动程序的分层体系结构的示意图。

从图的底部开始,下面介绍了每种类型的存储驱动程序:

  1. 存储端口驱动程序定义所有 Windows 存储类驱动程序的接口,包括系统提供的磁盘、磁带、CDROM、DVD 和更换器类驱动程序。 此端口/类接口使类驱动程序免受其各自设备连接到的主机总线适配器的适配器特定要求。 存储端口驱动程序还会同步对相应 HBA 上所有设备驱动程序的总线访问。 系统为 SCSI、IDE、USB 和 IEEE 1394 适配器提供存储端口驱动程序。

    存储端口驱动程序从下一个更高的驱动程序 (存储类驱动程序或干预筛选器驱动程序) 接收 SRB,并按如下所示处理它们:

    • SCSI 或其他总线的存储端口驱动程序将具有 CDB 的 SRB 传递给操作系统无关、特定于 HBA 的 Storport 微型端口驱动程序 ,该驱动程序动态链接到其相应的端口驱动程序,并为特定 HBA 提供特定于硬件的支持。 有关实现 SCSI 微型端口驱动程序的信息,请参阅 Storport 微型端口驱动程序
    • 旧版 IDE/ATAPI 或 IEEE 1394 总线的存储端口驱动程序将从存储类驱动程序接收的 SDB 转换为基础适配器所需的格式,例如,根据特定于总线的传输协议重新打包 CDB,或将它们转换为不同的格式,从而将上层驱动程序与基础总线的特殊性隔离开来。
  2. 上层或下层 存储筛选器驱动程序 支持系统提供的存储类驱动程序未提供的设备特定功能。 较低的筛选器存储驱动程序监视存储类驱动程序颁发的 SRB 和/或 IRP,并根据需要对其进行修改,然后再将它们传递给下一个较低的驱动程序 (存储端口驱动程序或其他存储筛选器驱动程序) 。

    有关实现存储筛选器驱动程序的信息,请参阅 存储筛选器驱动程序

  3. 存储类驱动程序使用 SCSI 端口/类接口来控制系统提供存储端口驱动程序的任何总线上其类型的设备。 类驱动程序特定于特定的设备类,例如,一个类驱动程序可以在任何受支持的总线上运行所有 CD-ROM 设备;另一个可以控制所有磁盘设备。 存储类驱动程序通过生成包含 CDB 的 SDB 并将这些 SDB 颁发给下一个较低的驱动程序 (存储端口驱动程序或中间筛选器驱动程序) 来处理来自存储堆栈中更高级别的用户应用程序或驱动程序的 I/O 请求,就像设备是 SCSI 设备一样。

    存储类驱动程序的实现对高级驱动程序是透明的。 磁带或中型更换器设备的类驱动程序实现为链接到系统提供的类驱动程序的特定于设备的微型类驱动程序。 系统为其他存储设备(例如磁盘和 CD-ROM/DVD)提供的类驱动程序作为单一整体驱动程序实现。

    有关实现存储类驱动程序的信息,请参阅 存储类驱动程序。 有关实现磁带或更换器微型类驱动程序的信息,请参阅磁带 驱动程序更换器驱动程序

  4. 上层筛选器存储驱动程序截获存储堆栈中较高位置的用户应用程序和驱动程序的 IRP,然后可能会对其进行修改,然后再将它们传递到下一个较低级别的驱动程序 (存储类驱动程序或其他存储筛选器驱动程序) 。 筛选器驱动程序通常监视基础设备的性能。

设备连接到的总线类型及其存储端口驱动程序的实现对高级驱动程序是透明的。 可以根据端口/微型端口驱动程序体系结构(如 SCSI 端口驱动程序)实现存储端口驱动程序;作为一个整体驱动程序,用于控制单个标准硬件,例如 IDE/ATAPI 端口驱动程序;或 作为筛选器驱动程序,将 SRB 转换为其他驱动程序堆栈所需的格式,例如 IEEE 1394 端口驱动程序。

系统提供的 SCSI 端口驱动程序还可以充当存储类驱动程序与控制同一类型的非 SCSI 存储设备的 SCSI 微型端口驱动程序之间的接口。 例如,驱动程序编写器可以编写链接到系统 SCSI 端口驱动程序并使用其提供的接口的伪 SCSI 微型端口驱动程序,而不是为新的磁盘阵列控制器编写驱动程序,从而节省大量设计、开发和调试工作量。 需要这样的微型端口驱动程序才能将传入的 SCSI 命令转换为特定于设备的命令。 另一方面,系统提供的端口和类驱动程序代表伪 SCSI 微型端口处理许多必要的工作,包括初始化期间的注册表访问、所有资源和对象分配、同步、根据微型端口设备的功能预先调整请求的传输大小,以及重试请求。

有关 SRB 的更多详细信息,请参阅 Kernel-Mode 驱动程序体系结构参考。 有关 CDB 的设备类型特定信息,请参阅 INCITS SCSI-3 标准中的相应命令集。