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

ATA コマンドを記述する IdeTaskFile が IRB に含まれていることを示します。 サブコマンドは、より高速な検索のために要求をより細かくグループ化したことを示します。
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 値とその意味について説明します。

Value 意味
IRB_STATUS_PENDING 要求が進行中であることを示します。 ポート ドライバーは、この値に IrbStatus を初期化します。 ミニポート ドライバーは、 IrbStatus メンバーをこの値に設定しないでください。
IRB_STATUS_SUCCESS 要求が正常に完了したことを示します。
IRB_STATUS_DATALENGTH_MISMATCH データのアンダーランまたはオーバーラン エラーが発生したことを示します。 ミニポートは、アンダーランの場合に転送されたデータの実際の量を示すために、IRB の DataTransferLength フィールドを更新する必要があります。
IRB_STATUS_DEVICE_ERROR デバイスがエラーを返したことを示します。 ミニポート ドライバーは、コマンドの完了時にデバイスの ATA 状態とエラー レジスタの内容に Irb の AtaStatus フィールドと AtaError フィールドを更新する必要があります。
IRB_STATUS_INVALID_REQUEST ミニポートが指定された要求をサポートしていないことを示します。
IRB_STATUS_BUS_RESET 指定された要求の処理中にバスリセットが発生したことを示します。
IRB_STATUS_SELECTION_TIMEOUT 宛先デバイスを選択できなかったことを示します。
IRB_STATUS_BUSY デバイスがビジー状態であることを示します。 ポート ドライバーは、この状態で完了した要求を再試行します。 ビジー状態で完了した要求は、1 回だけ再試行されます。 デバイスが一定期間要求を処理できない場合は、 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 コマンドには request sense コマンドは必要ないため、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構造体の Previous フィールドは、このフラグが設定されている場合に有効です。
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 の前に、この IRB をできるだけ早く処理することを示します。

TimeOutValue

要求がタイムアウトする時間を秒単位で示します。

DataTransferLength

転送するデータを含むデータ バッファーの長さをバイト単位で格納します。

IrbExtension

ポート ドライバーによって割り当てられた要求ごとの拡張機能へのポインター。

DataBuffer

データが存在するバッファーへのポインター。

SenseInfoBuffer

センス データを保持するバッファーへのポインター。

NextIrb

処理される次の IRB へのポインター。 ポート ドライバーは、これを NULL に設定 します。 ミニポート ドライバーは、このフィールドを使用して、IRB を一緒にリンクできます。

Reserved

将来利用するために予約されています。

IdeTaskFile

指定されたコントローラーの IDE タスク ファイルを保持する IDE_TASK_FILE 型の構造体を格納します。 このメンバーは、 Function メンバーと IRB_FUNCTION_ATA_COMMAND の間のビットごとの AND の結果が 0 以外の場合に定義されます。

Cdb[16]

コマンド記述子ブロック (CDB) が含まれています。 このメンバーは、 Function メンバーと IRB_FUNCTION_ATAPI_COMMAND の間のビットごとの AND の結果が 0 以外の場合に常に定義されます。

PowerChange

電源状態遷移を定義 するPOWER_CHANGE_INFO 型の列挙値を示します。 このメンバーは、 Function が IRB_FUNCTION_POWER_CHANGE と等しいたびに定義されます。

AsUChar[16]

メンバー IdeTaskFilePowerChangeおよび Cdb に符号なし文字データとしてアクセスする手段を提供します。

注釈

IDE_REQUEST_BLOCK構造は、 SCSI_REQUEST_BLOCK と同様の機能を提供しますが、IDE バス上のデバイスの管理に適した特性を備えています。

要件

要件
Header irb.h (Irb.h を含む)

こちらもご覧ください

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK