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_THROUGH と ATA_PASS_THROUGH_EX」を参照してください。
要件
要件 | 値 |
---|---|
Header | ntddscsi.h (Ntddscsi.h を含む) |