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 请求的分类。

函数 子命令 说明
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。 微型端口驱动程序可以通过在 IRB IdeHwBuildIo 例程中设置此标志来请求端口驱动程序映射数据缓冲区。
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 任务文件。 每当 函数 成员和IRB_FUNCTION_ATA_COMMAND之间的按位 AND 结果为非零时,就定义此成员。

Cdb[16]

包含命令描述符块(CDB)。 每当 函数 成员和IRB_FUNCTION_ATAPI_COMMAND之间的按位 AND 结果为非零时,就定义此成员。

PowerChange

指示定义电源状态转换的 POWER_CHANGE_INFO 类型的枚举值。 每当 函数 等于IRB_FUNCTION_POWER_CHANGE时,都定义此成员。

AsUChar[16]

提供访问 IdeTaskFile PowerChangeCdb 作为无符号字符数据的成员的方法。

言论

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

要求

要求 价值
标头 irb.h (包括 Irb.h)

另请参阅

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK