ATA_PASS_THROUGH_EX 構造体 (ntddscsi.h)

ATA_PASS_THROUGH_EX構造体は、埋め込み ATA コマンドをターゲット デバイスに送信するようにポート ドライバーに指示する IOCTL_ATA_PASS_THROUGH 要求と組み合わせて使用されます。

構文

typedef struct _ATA_PASS_THROUGH_EX {
  USHORT    Length;
  USHORT    AtaFlags;
  UCHAR     PathId;
  UCHAR     TargetId;
  UCHAR     Lun;
  UCHAR     ReservedAsUchar;
  ULONG     DataTransferLength;
  ULONG     TimeOutValue;
  ULONG     ReservedAsUlong;
  ULONG_PTR DataBufferOffset;
  UCHAR     PreviousTaskFile[8];
  UCHAR     CurrentTaskFile[8];
} ATA_PASS_THROUGH_EX, *PATA_PASS_THROUGH_EX;

メンバー

Length

ATA_PASS_THROUGH_EX構造体の長さをバイト単位で指定します。

AtaFlags

データ転送の方向を示し、実行する操作の種類を指定します。 このメンバーの値は、次のフラグの組み合わせである必要があります。

ATA フラグ 意味
ATA_FLAGS_DRDY_REQUIRED コマンドをデバイスに送信する前に、デバイスからの DRDY 状態を待機します。
ATA_FLAGS_DATA_IN デバイスからデータを読み取ります。
ATA_FLAGS_DATA_OUT デバイスにデータを書き込みます。
ATA_FLAGS_48BIT_COMMAND 送信される ATA コマンドは、48 ビット論理ブロック・アドレス (LBA) 機能セットを使用します。 このフラグを設定すると、ATA_PASS_THROUGH_EX構造体の PreviousTaskFile メンバーの内容が有効である必要があります。
ATA_FLAGS_USE_DMA 転送モードを DMA に設定します。
ATA_FLAGS_NO_MULTIPLE 単一セクターのみを読み取る。

PathId

要求の IDE ポートまたはバスを示す整数を含みます。 この値は、ポート ドライバーによって設定されます。

TargetId

バス上のターゲット デバイスを示す整数を含みます。 この値は、ポート ドライバーによって設定されます。

Lun

デバイスの論理ユニット番号を示します。 この値は、ポート ドライバーによって設定されます。

ReservedAsUchar

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

DataTransferLength

データ バッファーのサイズをバイト単位で示します。 アンダーランが発生した場合、ミニポート ドライバーは、実際に転送されたバイト数にこのメンバーを更新する必要があります。

TimeOutValue

OS 固有のポート ドライバーが要求がタイムアウトしたと判断するまでの要求の実行が許可される秒数を示します。

ReservedAsUlong

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

DataBufferOffset

この構造体の先頭からデータ バッファーまでのオフセットをバイト単位で指定します。

PreviousTaskFile[8]

現在のパススルー コマンドの前にタスク ファイル入力レジスタの内容を指定します。 ATA_FLAGS_48BIT_COMMAND フラグが設定されていない場合、このメンバーは使用されません。

CurrentTaskFile[8]

入力と出力の両方でタスク ファイル レジスタの内容を指定します。 入力時に、 CurrentTaskFile の配列値は、次の方法でタスク ファイル入力レジスタにマップされます。

Byte 入力レジスタ
0 機能登録
1 セクター数レジスタ
2 セクター番号レジスタ
3 シリンダローレジスタ
4 シリンダー高レジスタ
5 デバイス/ヘッド レジスタ
6 コマンド レジスタ
7 予約済み
 

IOCTL_ATA_PASS_THROUGHが完了すると、ポート ドライバーは、埋め込みコマンドの完了時にデバイスの出力レジスタに存在する値で CurrentTaskFile を更新します。 CurrentTaskFile の配列値は、次のタスク ファイル出力レジスタに対応しています。

Byte 出力レジスタ
0 エラー レジスタ
1 セクター数レジスタ
2 セクター番号レジスタ
3 シリンダローレジスタ
4 シリンダー高レジスタ
5 デバイス/ヘッド レジスタ
6 状態レジスタ
7 予約済み

注釈

IOCTL_ATA_PASS_THROUGH は、バッファーに格納されたデバイス制御要求です。 システム メモリのバッファリングをバイパスするには、呼び出し元は IOCTL_ATA_PASS_THROUGH_DIRECTATA_PASS_THROUGH_DIRECT を使用する必要があります。 IOCTL_ATA_PASS_THROUGH_DIRECT要求を処理すると、システムはユーザー メモリ内のバッファーをロックダウンし、デバイスはこのメモリに直接アクセスします。

要件

要件
Header ntddscsi.h (Ntddscsi.h を含む)

こちらもご覧ください

ATA_PASS_THROUGH_DIRECT

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT