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_DIRECT と ATA_PASS_THROUGH_DIRECT を使用する必要があります。 IOCTL_ATA_PASS_THROUGH_DIRECT要求を処理すると、システムはユーザー メモリ内のバッファーをロックダウンし、デバイスはこのメモリに直接アクセスします。
要件
要件 | 値 |
---|---|
Header | ntddscsi.h (Ntddscsi.h を含む) |