设置存储类驱动程序的设备扩展

在存储类驱动程序创建的每个设备对象的"设备扩展"中,该驱动程序为它用来管理设备的 I/O 请求的任何驱动程序确定数据提供存储,例如指向传递给 AddDevice 的 PDO 的指针、指向 IoAttachDeviceToDeviceStack 返回的设备对象的指针(指向其自己的设备对象的后退指针) 等等。

大多数存储类驱动程序还会为以下信息提供存储:

  • 特定于设备类型的超时值

    类驱动程序可以将它发送到端口驱动程序的超时值(以 SMB 表示)传递,该时间SRB_FUNCTION_EXECUTE_SCSI请求 (请参阅 SCSI_REQUEST_BLOCK) 代表每个类驱动程序。 如果端口驱动程序将请求发送到基础驱动程序到请求完成之间的时间间隔超过指定的超时值,则端口驱动程序将返回 SRB,其 SrbStatus 成员设置为 SRB_STATUS_TIMEOUT。

  • 指向类驱动程序的错误处理例程的指针

    有关存储类驱动程序中的错误处理的详细信息,请参阅类驱动程序的 IoCompletion 例程。

  • 驱动程序在设备上维护总线协议错误的计数

  • 指向用于检测数据的驱动程序分配的缓冲区的指针

    类驱动程序必须为缓存对齐的非分页池中返回的检测数据分配内存。 有关为驱动程序缓冲区分配内存的信息,请参阅 分配System-Space内存

  • 类驱动程序以 SRB 表示的 SrbFlags 驱动程序确定的默认值

  • 一个指针,如果驱动程序为其分配的 SMB 设置了外观列表,指向该标头的指针

    有关详细信息 ,请参阅使用 Lookaside 列表。

  • 指向 IRP 和 S (RB 的指针,这些请求即使在内存不足的情况下也必须成功,对于分页操作以及错误恢复操作(如 存储 类驱动程序的 ReleaseQueue 例程执行的请求)也必须成功)

  • 指向端口STORAGE_ADAPTER_DESCRIPTOR STORAGE_DEVICE_DESCRIPTOR HBA 收集的数据的指针

    有关类驱动程序如何获取和使用此数据的信息,存储类驱动程序的 GetDescriptor 例程

  • 指示上一个和当前 PnP 状态的标志,用于管理设备上状态之间的转换

  • 指示当前设备电源状态的标志,以避免在处理冗余电源请求时完成额外的工作

  • 基于驱动程序接收的分页通知请求在设备上进行系统分页文件的计数( 如果有 (IRP_MJ_PNP IRP_MN_DEVICE_USAGE_NOTIFICATION)

如果不使用 IoAttachDeviceToDeviceStack 返回且由驱动程序 的 AddDevice 例程存储在设备扩展中的设备对象指针,存储类驱动程序无法通过存储端口驱动程序向设备发送请求。