SCSI HBA 的设备对象示例
下图显示了为具有 PCI IEEE 1394 控制器的系统创建的设备对象,以及附加了 CD-ROM 和可分区磁盘设备的 PCI SCSI 适配器。 附加到 IEEE 1394 控制器的设备的对象在 IEEE 1394 控制器的设备对象示例中显示和描述。
SCSI HBA 上 CD-ROM 和磁盘设备的设备对象树
从图底部开始,下面介绍了每个设备对象及其关联的驱动程序:
存储总线驱动程序为存储总线创建 FDO,并将其附加到 PnP 管理器创建的存储总线 PDO, (此图) 未显示。 存储总线 FDO 下面的设备对象树的结构取决于存储总线及其集成到系统中的方式。 高于端口驱动程序级别的存储驱动程序不会与这些较低级别的任何对象交互。
此图显示了由 PCI 总线驱动程序为具有 PCI 总线的系统创建的存储总线 FDO。
PCI 总线驱动程序枚举并为其总线上的每个存储适配器创建 PDO。 相应的存储端口驱动程序创建 FDO 并将其附加到其适配器的 PDO。
此图显示了两个适配器 PDO:一个用于 IEEE 1394 控制器 (设备对象示例中所述的 IEEE 1394 控制器) ,另一个用于 SCSI HBA。 SCSI 端口驱动程序和关联的微型端口驱动程序创建 FDO 并将其附加到 SCSI 适配器 PDO。
存储端口驱动程序通过为每个连接到其适配器的目标设备创建 PDO 来虚拟化目标设备。 此图显示了 SCSI 端口/微型端口驱动程序创建的两个此类 PDO:一个用于硬盘驱动器,一个用于 CD-ROM。
一个或多个筛选器驱动程序可以将筛选器设备对象 (筛选器 DO) 附加到存储端口驱动程序导出的目标设备 PDO。 例如,此类筛选器驱动程序可以截获和更改类驱动程序发送到目标设备的请求,以解决特定于设备的问题,而无需对泛型类或端口驱动程序进行特定于硬件的更改。
此图显示了由 CD 音频筛选器驱动程序附加到 CD-ROM 的 PDO 的筛选器 DO。
存储类驱动程序创建 FDO 并将其附加到下一个设备对象,后者是由存储端口驱动程序导出的目标设备 PDO,或者由干预筛选器驱动程序附加到堆栈的筛选器 DO。 类驱动程序通过较低驱动程序的设备对象向存储设备发出所有后续请求。
此图显示了两个此类 FDO:一个代表 CD-ROM 设备,一个表示硬盘驱动器的分区 0。 分区 0 表示整个原始磁盘,并且无论驱动器是否已分区,都始终存在。
类驱动程序还可以充当总线驱动程序,当 PnP 管理器使用 BusRelations) 查询其子设备 (IRP_MN_QUERY_DEVICE_RELATIONS时返回 PDO 列表。 例如,已分区媒体设备的驱动程序(如可移动磁盘)可能会返回表示其分区的 PDO 列表。 更高级别的驱动程序将 FDO 附加到这些 PDO。
此图显示了三个此类 PDO,每个 PDO 表示可以作为目标设备寻址的磁盘分区。
对于固定磁盘,分区管理器会附加到表示分区 0 的 FDO,并代表所有分区处理 PnP 操作。 分区管理器的活动对磁盘类驱动程序和任何上层筛选器驱动程序都是透明的。
可以在类驱动程序上方附加一个或多个筛选器驱动程序。 与较低级别的筛选器驱动程序不同,上层筛选器驱动程序会截获发送到类驱动程序的 IRP,并且可以在转发到下一个较低级别的设备对象之前对其进行更改。 筛选器驱动程序可以截获任何读/写请求并根据需要转换数据,并定义其他 I/O 控制代码 (IOCTL) ,例如,使用户应用程序能够提供密码或其他相关信息。
此图显示了由磁盘加密筛选器驱动程序创建并附加到分区 1 的磁盘 PDO 的筛选器 DO。