存储类驱动程序的 GetDescriptor 例程

对于数据传输操作,存储类驱动程序需要有关每个 HBA 的配置信息,该 HBA 驱动其设备所附加到的总线。 若要获取此信息,类驱动程序会调用内部 GetDescriptor 例程或在其 StartDevice 例程中实现相同的功能。 (有关 StartDevice 的信息,请参阅 处理存储类 Driver 中的 PnP 启动)

GetDescriptor 例程 (IRP_MJ_DEVICE_CONTROL生成和设置查询属性请求,IOCTL_STORAGE_QUERY_PROPERTY) 端口驱动程序检索类驱动程序存储在其设备扩展中的设备和适配器描述符。 类驱动程序还可以根据返回的描述符数据在设备扩展中设置驱动程序编写器确定的标志。

类驱动程序检查返回 的STORAGE_DEVICE_DESCRIPTOR 数据,以确定设备功能 (SCSI 查询数据或非 SCSI 等效) (例如 SCSI 设备类型),设备的媒体 ((如果任何) 可移动 (可移动)) , 设备是否支持多个未完成的命令 (CommandQueueing) ,以及各种 ID 字符串。 类驱动程序检查返回 STORAGE_ADAPTER_DESCRIPTOR 数据以确定适配器功能,包括:

  • 特定 HBA 可以在单个操作中传输的最大字节数 (MaximumTransferLength) 。

  • 如果 HBA 可以传输由非连续物理页支持的缓冲数据, (换句话说,如果它支持散点/收集) ,则每个缓冲区可以管理多少个非连续物理页,每个传输操作 (MaximumPhysicalPages) 。

  • HBA 对传输的对齐要求,以便类驱动程序可以在其设备对象中正确设置 AlignmentRequirement 字段 (AlignmentMask) 。

    发送 IOCTL_SCSI_PASS_THROUGH 请求的应用程序也可能使用此字段。

    有关在设备对象中设置 AlignmentRequirement 的详细信息,请参阅 初始化设备对象

  • HBA 是否支持 SCSI 标记的队列和/或每个逻辑单元的内部队列 (CommandQueueing) 。

  • HBA 是否支持同步传输 (AcceleratedTransfer) 。

  • HBA 是否在内部缓存数据 (CachesData) 。

类驱动程序应将此信息存储在 FDO 的设备扩展中,以便其调度例程可以确保发送到存储端口驱动程序的所有请求都符合基础 HBA 的大小、物理中断次数和对齐要求。 有关类驱动程序调度例程的详细信息,请参阅 存储类驱动程序的调度例程。 有关设置设备扩展的详细信息,请参阅 设置存储类驱动程序的设备扩展