IDE_REQUEST_BLOCK 结构 (irb.h)

IDE_REQUEST_BLOCK 结构定义 IDE 请求块。

注意 ATA 端口驱动程序和 ATA 微型端口驱动程序模型将来可能会更改或不可用。 建议改用 Storport 驱动程序Storport 微型端口 驱动程序模型。
 

语法

typedef struct _IDE_REQUEST_BLOCK {
  USHORT Function;
  UCHAR  IrbStatus;
  UCHAR  AtaStatus;
  UCHAR  AtaError;
  UCHAR  Channel;
  UCHAR  TargetId;
  UCHAR  Lun;
  UCHAR  CdbLength;
  UCHAR  SenseInfoBufferLength;
  UCHAR  SenseInfoBufferType;
  UCHAR  QueueTag;
  ULONG  ReservedAsUlong;
  ULONG  IrbFlags;
  ULONG  TimeOutValue;
  ULONG  DataTransferLength;
  PVOID  IrbExtension;
  PVOID  DataBuffer;
  PVOID  SenseInfoBuffer;
  PVOID  NextIrb;
  PVOID  Reserved;
  union {
    IDE_TASK_FILE  IdeTaskFile;
    UCHAR          Cdb[16];
    IDE_POWER_INFO PowerChange;
    UCHAR          AsUChar[16];
  };
} IDE_REQUEST_BLOCK, *PIDE_REQUEST_BLOCK;

成员

Function

指定请求所属的类别。 下表描述了 I/O 请求的分类。

Function 子命令 说明
IRB_FUNCTION_ATA_COMMAND IRB_FUNCTION_ATA_IDENTIFY

IRB_FUNCTION_ATA_READ

IRB_FUNCTION_ATA_WRITE

IRB_FUNCTION_ATA_FLUSH

IRB_FUNCTION_ATA_SMART

指示 IRB 包含描述 ATA 命令的 IdeTaskFile。 子命令指示对请求进行更精细的分组,以便更快地查找。
IRB_FUNCTION_ATAPI_COMMAND IRB_FUNCTION_REQUEST_SENSE 指示 IRB 包含描述 ATAPI 命令的 CDB。
IRB_FUNCTION_MINIPORT_COMMAND IRB_FUNCTION_ADAPTER_FLUSH

IRB_FUNCTION_SHUTDOWN

IRB_FUNCTION_POWER_CHANGE

IRB_FUNCTION_POWER_REBOOT

IRB_FUNCTION_LUN_RESET

IRB_FUNCTION_MINIPORT_IOCTL

指示 IRB 适用于微型端口。 微型端口负责正确解释命令。

IrbStatus

微型端口必须将此成员设置为指示指定操作的状态。 下表描述了各种 IrbStatus 值及其含义。

含义
IRB_STATUS_PENDING 指示请求正在进行中。 端口驱动程序将 IrbStatus 初始化为此值。 微型端口驱动程序绝不应将 IrbStatus 成员设置为此值。
IRB_STATUS_SUCCESS 指示请求已成功完成。
IRB_STATUS_DATALENGTH_MISMATCH 指示发生了数据不足或溢出错误。 微型端口必须更新 IRB 中的 DataTransferLength 字段,以指示在运行不足的情况下传输的实际数据量。
IRB_STATUS_DEVICE_ERROR 指示设备返回错误。 微型端口驱动程序必须在命令完成时将 Irb 中的 AtaStatusAtaError 字段更新为设备 ATA 状态和错误注册的内容。
IRB_STATUS_INVALID_REQUEST 指示微型端口不支持给定的请求。
IRB_STATUS_BUS_RESET 指示在处理给定请求时发生总线重置。
IRB_STATUS_SELECTION_TIMEOUT 指示无法选择目标设备。
IRB_STATUS_BUSY 指示设备正忙。 端口驱动程序会重试此状态完成的任何请求。 以忙碌状态完成的请求仅重试一次。 如果设备在一段时间内无法处理请求,微型端口驱动程序负责使用 AtaPortDeviceBusy 暂停请求队列。
IRB_STATUS_AUTOSENSE_VALID IRB_STATUS_AUTOSENSE_VALID是一个位掩码,指示 IRB 的 SenseInfoBuffer 成员中的有效感知数据。
IRB_STATUS_RETURN_TASKFILE_VALID IRB_STATUS_RETURN_TASKFILE_VALID是一个位掩码,指示 IRB 的 SenseInfoBuffer 成员中的有效返回任务文件。

AtaStatus

指示设备在其状态寄存器中返回的状态。 使用 IRB_STATUS_DEVICE_ERROR 完成 IRB 时,微型端口驱动程序应更新此字段。

AtaError

指示设备在其错误寄存器中返回的错误值。 使用 IRB_STATUS_DEVICE_ERROR 完成 IRB 时,微型端口驱动程序应更新此字段。

Channel

指定通道编号。

TargetId

指定设备的目标 ID。

Lun

指定设备的逻辑单元号。

CdbLength

指定 Cdb 指向的缓冲区的长度(以字节为单位)。

SenseInfoBufferLength

指定 SenseInfoBuffer 指向的缓冲区的长度(以字节为单位)。

SenseInfoBufferType

指定 SenseInfoBuffer 中返回的数据结构的类型。 由于 ATA 命令不需要请求感知命令,因此ATA_PASS_THROUGH命令使用 SenseInfoBuffer 返回任务文件信息。 对于 ATA_PASS_THROUGH 命令,如 IrbFlags 成员中标识的那样,相应的返回 TaskFile 大小应报告为 SENSE_INFO_BUFFER_RETURN_TYPE_28BIT_TASKFILE 或

SENSE_INFO_BUFFER_RETURN_TYPE_48BIT_TASKFILE。

QueueTag

此 IRB 的队列标记。 端口驱动程序将此字段设置为 0。

ReservedAsUlong

保留供将来使用。

IrbFlags

使用需要执行的某些操作限定请求。 下表对它们进行了详细描述。

标记 说明
IRB_FLAGS_DRDY_REQUIRED 指示微型端口驱动程序必须在发出此命令之前等待设备在 ATA 状态寄存器中设置 DRDY 位。
IRB_FLAGS_USE_DMA 指示请求具有关联的散点/收集列表,微型端口驱动程序可以使用 DMA 传输此请求的数据。
IRB_FLAGS_MAP_BUFFERS 指示映射 IRB 中的 DataBuffer 字段。 设置此标志后,微型端口可以安全地访问 DataBuffer 。 如果未设置标志,微型端口驱动程序不得访问 DataBuffer 。 微型端口驱动程序可以通过在其 IdeHwBuildIo 例程中的 IRB 中设置此标志来请求端口驱动程序映射数据缓冲区。
IRB_FLAGS_48BIT 指示 IRB 中的 ATA 命令属于 48 位 LBA 功能集。 设置此标志时,_IDE_TASK_FILE结构中的“上一个”字段有效。
IRB_FLAGS_PIO_MULTIPLE 指示将使用 ATA PIO Multiple 方法传输 ATA 命令。
IRB_FLAGS_RETURN_RESULTS 指示 ATA 返回任务文件要复制到 SenseInfoBuffer
IRB_FLAGS_DATA_IN 指示将数据从设备传输到主机系统, (读取操作) 。
IRB_FLAGS_DATA_OUT 指示将数据从主机系统传输到设备, ( 写入操作) 。
IRB_FLAGS_DISCARDABLE 指示命令应尽最大努力完成。 (注意:ATAport) 当前不使用此功能。
IRB_FLAGS_HIGH_PRIORITY 指示在 ATA 微型端口中当前具有非高优先级 IRB 之前,将尽快处理此 IRB。

TimeOutValue

指示请求将超时的时间(以秒为单位)。

DataTransferLength

包含包含要传输的数据的数据缓冲区的长度(以字节为单位)。

IrbExtension

指向端口驱动程序分配的每个请求扩展的指针。

DataBuffer

指向数据所在的缓冲区的指针。

SenseInfoBuffer

指向保存感知数据的缓冲区的指针。

NextIrb

指向要处理的下一个 IRB 的指针。 端口驱动程序将此设置为 NULL。 微型端口驱动程序可以使用此字段将 IRB 链接在一起。

Reserved

保留供将来使用。

IdeTaskFile

包含 IDE_TASK_FILE 类型的结构,用于保存所指示控制器的 IDE 任务文件。 只要 Function 成员与 IRB_FUNCTION_ATA_COMMAND 之间的按位 AND 结果为非零值,则定义此成员。

Cdb[16]

包含 CDB) (命令描述符块。 只要 Function 成员与 IRB_FUNCTION_ATAPI_COMMAND 之间的按位 AND 结果为非零值,则定义此成员。

PowerChange

指示定义电源状态转换的 POWER_CHANGE_INFO 类型的枚举值。 只要 Function 等于 IRB_FUNCTION_POWER_CHANGE,就定义此成员。

AsUChar[16]

提供一种将成员 IdeTaskFilePowerChangeCdb 作为无符号字符数据进行访问的方法。

注解

IDE_REQUEST_BLOCK 结构提供与 SCSI_REQUEST_BLOCK 类似的功能 但具有更适合管理 IDE 总线上的设备的特征。

要求

要求
Header irb.h (包括 Irb.h)

另请参阅

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK