IOCTL_ATA_PASS_THROUGH_DIRECT IOCTL (ntddscsi.h)
IOCTL_ATA_PASS_THROUGH_DIRECT を使用すると、アプリケーションは、ほぼすべての ATA コマンドをターゲット デバイスに送信できます。次の制限があります。
ターゲットの種類のデバイスのクラス ドライバーが存在する場合、アプリケーションはクラス ドライバーに要求を送信する必要があります。 したがって、アプリケーションは、デバイスのクラス ドライバーがない場合にのみ、ターゲット論理ユニットのシステム ポート ドライバーに直接この要求を送信できます。
埋め込まれた ATA コマンドで、基になるミニポート ドライバーがメモリに直接アクセスする必要がある場合は、アプリケーションでIOCTL_ATA_PASS_THROUGHではなく、この要求を使用する必要があります。
ATA コマンドがデータ転送操作を要求する場合、呼び出し元は、ドライバーがデータを直接転送できるキャッシュアラインバッファーを設定する必要があります。 呼び出し元は、次のことを確認する必要があります。
- データ転送の長さは、デバイスの I/O アラインメント要件を満たします。それ以外の場合、この IOCTL はSTATUS_INVALID_PARAMETERで失敗します。
- データ転送の長さは、デバイスの最大 I/O 転送長を超えてはなりません。それ以外の場合は、デバイスが要求を失敗することが予想されます。
IOCTL_ATA_PASS_THROUGH_DIRECT要求は、通常、大量のデータ (16 KB を超える) を転送するために使用されます。
メジャー コード
[入力バッファー]
Irp-AssociatedIrp.SystemBuffer> のバッファーには、実行するコマンドの並べ替えを示す一連のタスク ファイル入力レジスタを含むATA_PASS_THROUGH_DIRECT構造体が含まれています。 呼び出し元は、ポート ドライバーが入力する PathId、 TargetId、 Lun を除き、この構造体のすべてのメンバーを初期化する必要があります。 data-out コマンドの場合、ATA_PASS_THROUGH_DIRECT の DataBuffer メンバーは、書き込まれるデータを含むキャッシュアラインバッファーを指す必要があります。
入力バッファーの長さ
Parameters.DeviceIoControl.InputBufferLengthは、Irp-AssociatedIrp.SystemBuffer> のバッファーのサイズをバイト単位で示します。 InputBufferLength の値は固定されており、転送されるデータの量には依存しません。 sizeof(ATA_PASS_THROUGH_DIRECT) と同じです。 バッファーのサイズが sizeof(ATA_PASS_THROUGH_DIRECT) より小さい場合、ポート ドライバーは I/O 要求に失敗し、エラーを返します。
出力バッファー
ポート ドライバーは、Irp-AssociatedIrp.SystemBuffer> のバッファーに格納されるATA_PASS_THROUGH_DIRECT構造体を使用して、戻り値のデータを書式設定します。
ポート ドライバーは、転送されたデータを、ATA_PASS_THROUGH_DIRECTの DataBuffer メンバーが指すキャッシュアラインバッファーに格納します。
ポート ドライバーは、ATA コマンドの完了時にデバイスの出力レジスタに存在する値をATA_PASS_THROUGH_DIRECTの CurrentTaskFile メンバーに入力します。 アプリケーションは、出力レジスタの内容を解釈して、デバイスから返されたエラー (存在する場合) を判断する役割を担います。
出力バッファーの長さ
ポート ドライバーは、デバイスから転送されたデータの量を示すために、ATA_PASS_THROUGH_DIRECT構造体の DataTransferLength メンバーを更新します。
入力/出力バッファー
[なし] :
入力/出力バッファーの長さ
適用不可。
ステータス ブロック
Information メンバーは、Irp-AssociatedIrp.SystemBuffer> の出力バッファーで返されるバイト数に設定されます。 Status メンバーは、STATUS_SUCCESSに設定されているか、ATA_PASS_THROUGH_DIRECTの入力 Length 値が正しく設定されていない場合はSTATUS_BUFFER_TOO_SMALLまたはSTATUS_INVALID_PARAMETERに設定されます。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Server 2003 |
Header | ntddscsi.h (Ntddscsi.h を含む) |