SCSI_POWER_REQUEST_BLOCK结构(storport.h)
SCSI_POWER_REQUEST_BLOCK 结构是用于电源管理请求的 SCSI_REQUEST_BLOCK 的特殊版本。
注意
将来可能会更改 SCSI 端口驱动程序和 SCSI 微型端口驱动程序模型或不可用。 相反,我们建议使用 Storport 驱动程序,Storport 微型端口 驱动程序模型。
语法
typedef struct _SCSI_POWER_REQUEST_BLOCK {
USHORT Length;
UCHAR Function;
UCHAR SrbStatus;
UCHAR SrbPowerFlags;
UCHAR PathId;
UCHAR TargetId;
UCHAR Lun;
STOR_DEVICE_POWER_STATE DevicePowerState;
ULONG SrbFlags;
ULONG DataTransferLength;
ULONG TimeOutValue;
PVOID DataBuffer;
PVOID SenseInfoBuffer;
struct _SCSI_REQUEST_BLOCK *NextSrb;
PVOID OriginalRequest;
PVOID SrbExtension;
STOR_POWER_ACTION PowerAction;
ULONG Reserved;
UCHAR Reserved5[16];
} SCSI_POWER_REQUEST_BLOCK, *PSCSI_POWER_REQUEST_BLOCK;
成员
Length
SCSI_POWER_REQUEST_BLOCK 结构的大小(以字节为单位)。
Function
要执行的作。 对于 SCSI_POWER_REQUEST_BLOCK 结构,此成员始终设置为SRB_FUNCTION_POWER。
SrbStatus
已完成请求的状态。 此成员应由微型端口驱动程序设置,然后通知 Storport 驱动程序请求已完成。 微型端口驱动程序使用 RequestComplete 通知类型调用 StorPortNotification 函数,通知 Storport 驱动程序已完成请求。
有关此成员可能值的列表,请参阅 WDK 文档中的 SCSI_REQUEST_BLOCK。
SrbPowerFlags
电源管理标志。 目前,唯一允许的标志是SRB_POWER_FLAGS_ADAPTER_REQUEST,这表示电源管理请求适用于适配器。 如果设置了此标志,微型端口驱动程序应忽略 PathId、TargetId和 Lun中的值。
PathId
请求的 SCSI 端口或总线标识符。 此值基于零。
TargetId
总线上的目标控制器或设备标识符。
Lun
设备的逻辑单元号(LUN)。
DevicePowerState
STOR_DEVICE_POWER_STATE 类型的枚举器值,该值指定设备的请求电源状态。
SrbFlags
微型端口驱动程序应忽略此成员。
DataTransferLength
微型端口驱动程序应忽略此成员。
TimeOutValue
在 Storport 驱动程序确定请求超时之前,请求可以执行的间隔(以秒为单位)。
DataBuffer
微型端口驱动程序应忽略此成员。
SenseInfoBuffer
微型端口驱动程序应忽略此成员。
NextSrb
微型端口驱动程序应忽略此成员。
OriginalRequest
微型端口驱动程序应忽略此成员。
SrbExtension
指向 SRB 扩展的指针。 如果微型端口驱动程序在 HW_INITIALIZATION_DATA 结构中将 SrbExtensionSize 设置为零,则不得使用此成员。 Storport 驱动程序不会初始化此成员指向的内存。 HBA 可以直接访问微型端口驱动程序写入 SRB 扩展的数据。 微型端口驱动程序可以通过调用 StorPortGetPhysicalAddress 例程来获取 SRB 扩展的物理地址。
PowerAction
STOR_POWER_ACTION 类型的枚举器值,该值指定即将发生的系统关闭类型。 仅当设备移动到 D1、D2 或 D3 电源状态时,此值才有意义,如 DevicePowerState 成员指示。
Reserved
保留供系统使用。
Reserved5[16]
保留供系统使用。
言论
Storport 驱动程序调用 HwStorBuildIo 将 SB 传递给微型端口驱动程序。 HwStorBuildIo 应检查 SRB 的 函数 成员以确定 SRB 的类型。 如果 函数 成员设置为SRB_FUNCTION_POWER,则 SRB 是 SCSI_POWER_REQUEST_BLOCK类型的结构。
Storport 驱动程序向微型端口驱动程序发送 SCSI_POWER_REQUEST_BLOCK 请求,以通知影响连接到适配器的存储设备的 Windows 电源事件的微型端口驱动程序。 对于启动事件,此请求使微型端口驱动程序有机会初始化自身。 对于休眠或关闭事件,此请求使微型端口驱动程序有机会完成 I/O 请求并准备关闭电源。 微型端口驱动程序可以使用 SCSI_POWER_REQUEST_BLOCKPowerAction 成员中的值来确定需要哪些作。 微型端口驱动程序完成 SCSI_POWER_REQUEST_BLOCK 请求后,Storport 驱动程序会调用 HwScsiAdapterControl,并发出控制请求 ScsiStopAdapter 来关闭适配器。 微型端口驱动程序在处理SRB_FUNCTION_POWER请求时重新初始化,或者当 Storport 驱动程序调用 HwStorAdapterControl 以执行 ScsiRestartAdapter 控制请求时,它可以等待并重新初始化。
从 D0 电源状态转换为低功率状态(D1、D2 或 D3)时,Storport 驱动程序会在基础总线驱动程序关闭适配器之前向微型端口驱动程序发送 SCSI_POWER_REQUEST_BLOCK 请求。
在 Storport 驱动程序将 SCSI_POWER_REQUEST_BLOCK 请求发送到微型端口驱动程序之前,必须存在以下条件:
- 适配器未停止。
- 适配器的 I/O 队列已暂停。
- 适配器硬件已启动。
- 微型端口可以访问适配器的硬件资源。
要求
要求 | 价值 |
---|---|
标头 | storport.h (包括 Storport.h、Minitape.h、Srb.h) |