次の方法で共有


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_MJ_DEVICE_CONTROL

[入力バッファー]

Irp-AssociatedIrp.SystemBuffer> のバッファーには、実行するコマンドの並べ替えを示す一連のタスク ファイル入力レジスタを含むATA_PASS_THROUGH_DIRECT構造体が含まれています。 呼び出し元は、ポート ドライバーが入力する PathIdTargetIdLun を除き、この構造体のすべてのメンバーを初期化する必要があります。 data-out コマンドの場合、ATA_PASS_THROUGH_DIRECTDataBuffer メンバーは、書き込まれるデータを含むキャッシュアラインバッファーを指す必要があります。

入力バッファーの長さ

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_DIRECTDataBuffer メンバーが指すキャッシュアラインバッファーに格納します。

ポート ドライバーは、ATA コマンドの完了時にデバイスの出力レジスタに存在する値をATA_PASS_THROUGH_DIRECTCurrentTaskFile メンバーに入力します。 アプリケーションは、出力レジスタの内容を解釈して、デバイスから返されたエラー (存在する場合) を判断する役割を担います。

出力バッファーの長さ

ポート ドライバーは、デバイスから転送されたデータの量を示すために、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 を含む)

こちらもご覧ください

ATA_PASS_THROUGH_DIRECT

IOCTL_ATA_PASS_THROUGH