ATA_PASS_THROUGH_DIRECT 構造体 (ntddscsi.h)

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

構文

typedef struct _ATA_PASS_THROUGH_DIRECT {
  USHORT Length;
  USHORT AtaFlags;
  UCHAR  PathId;
  UCHAR  TargetId;
  UCHAR  Lun;
  UCHAR  ReservedAsUchar;
  ULONG  DataTransferLength;
  ULONG  TimeOutValue;
  ULONG  ReservedAsUlong;
  PVOID  DataBuffer;
  UCHAR  PreviousTaskFile[8];
  UCHAR  CurrentTaskFile[8];
} ATA_PASS_THROUGH_DIRECT, *PATA_PASS_THROUGH_DIRECT;

メンバー

Length

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

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_DIRECT構造体の PreviousTaskFile メンバーの内容が有効である必要があります。
ATA_FLAGS_USE_DMA 転送モードを DMA に設定します。
ATA_FLAGS_NO_MULTIPLE 単一セクターのみを読み取る。

PathId

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

TargetId

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

Lun

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

ReservedAsUchar

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

DataTransferLength

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

TimeOutValue

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

ReservedAsUlong

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

DataBuffer

データ バッファーへのポインター。

PreviousTaskFile[8]

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

CurrentTaskFile[8]

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

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

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

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

注釈

ATA_PASS_THROUGH_DIRECT構造体は、 IOCTL_ATA_PASS_THROUGH_DIRECTと共に使用されます。 この要求により、システムはユーザー メモリ内のバッファーをロックダウンし、デバイスはこのメモリに直接アクセスします。 このデバイス制御要求に相当するダブル バッファーについては、「 IOCTL_ATA_PASS_THROUGHATA_PASS_THROUGH_EX」を参照してください。

要件

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

こちらもご覧ください

ATA_PASS_THROUGH_EX

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT