次の方法で共有


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

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 のさまざまな 値とその意味について説明します。

値の 意味
IRB_STATUS_PENDING 要求が進行中であることを示します。 ポート ドライバーは、この値 IrbStatus を初期化します。 ミニポート ドライバーは、IrbStatus メンバーをこの値に設定しないでください。
IRB_STATUS_SUCCESS 要求が正常に完了したことを示します。
IRB_STATUS_DATALENGTH_MISMATCH データのアンダーランまたはオーバーラン エラーが発生したことを示します。 ミニポートは、アンダーランの場合に転送されたデータの実際の量を示すために、IRB の DataTransferLength フィールドを更新する必要があります。
IRB_STATUS_DEVICE_ERROR デバイスがエラーを返したことを示します。 ミニポート ドライバーは、AtaStatus を更新し、コマンドの完了時にデバイスの ATA 状態とエラー レジスタの内容に Irb の 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 コマンドは要求センス コマンドを必要としないため、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 設定します。 ミニポート ドライバーは、このフィールドを使用して、IRP を一緒にリンクできます。

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 型の列挙値を示します。 このメンバーは、関数 IRB_FUNCTION_POWER_CHANGEと等しいたびに定義されます。

AsUChar[16]

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

備考

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

必要条件

要件 価値
ヘッダー irb.h (Irb.h を含む)

関連項目

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK