SCSI_POWER_REQUEST_BLOCK 结构 (minitape.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,这指示电源管理请求是针对适配器的。 如果设置了此标志,微型端口驱动程序应忽略 PathIdTargetIdLun 中的值。

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 的枚举器值,指定即将发生的系统关闭类型。 仅当设备移动到 DevicePowerState 成员指示的 D1、D2 或 D3 电源状态时,此值才有意义。

Reserved

预留给系统使用。

Reserved5[16]

预留给系统使用。

注解

Storport 驱动程序调用 HwStorBuildIo 将 SRB 传递给微型端口驱动程序。 HwStorBuildIo 应检查 SRB 的 Function 成员来确定 SRB 的类型。 如果 Function 成员设置为 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 驱动程序使用 ScsiStopAdapter 的控制请求调用 HwScsiAdapterControl 以关闭适配器。 微型端口驱动程序在处理SRB_FUNCTION_POWER请求时重新初始化,也可以在 Storport 驱动程序调用 HwStorAdapterControl 来执行 ScsiRestartAdapter 控制请求时等待并重新初始化。

当从 D0 电源状态转换为低功率状态 (D1、D2 或 D3 时,) Storport 驱动程序会在基础总线驱动程序关闭适配器之前向微型端口驱动程序发送 SCSI_POWER_REQUEST_BLOCK 请求。

在 Storport 驱动程序向微型端口驱动程序发送 SCSI_POWER_REQUEST_BLOCK 请求之前,必须存在以下条件:

  • 适配器未停止。
  • 适配器的 I/O 队列已暂停。
  • 适配器硬件已通电。
  • 微型端口可以访问适配器的硬件资源。

要求

要求
Header minitape.h (包括 Storport.h、Minitape.h、Srb.h)

另请参阅

HwStorBuildIo

SCSI_REQUEST_BLOCK

StorPortNotification