SCSI パススルー要求の処理

IOCTL_SCSI_PASS_THROUGH 要求または IOCTL_SCSI_PASS_THROUGH_DIRECT 要求を生成するクラス ドライバーは、次の処理を行います。

  • Parameters.DeviceIoControl.InputBufferLength のユーザー バッファーの長さを、少なくとも sizeof (SCSI_PASS_THROUGH) または sizeof (SCSI_PASS_THROUGH_DIRECT) に設定します

  • 記憶域ポート ドライバーの I/O スタックの場所を通常どおりに設定します

  • IRP の MinorFunction を IRP_MJ_DEVICE_CONTROL に設定すると、要求が記憶域クラス ドライバーによって処理されたものとしてマークされます。

上位レベルのドライバーから IOCTL_SCSI_PASS_THROUGH または IOCTL_SCSI_PASS_THROUGH_DIRECT 要求を受信すると、記憶域クラス ドライバーの DispatchDeviceControl ルーチンは、埋め込み SCSI コマンド (CDB) の有効性をチェックし、コマンドがデバイスに対して有効な場合は、記憶域ポート ドライバーに要求を送信します。

IOCTL_SCSI_PASS_THROUGH または IOCTL_SCSI_PASS_THROUGH_DIRECT 要求のポート ドライバーの I/O スタックの場所に、IRP_MJ_DEVICE_CONTROL で MinorFunction フィールドが設定されていない場合、ポート ドライバーは、要求がアプリケーションから直接送信され、ターゲット デバイスの種類に対してクラス ドライバーが存在しないと見なします。 記憶域クラス ドライバーによって要求されたデバイスのポート ドライバーにこのような要求を直接送信することは、アプリケーション エラーです。

ポート ドライバーは、このようなパススルー要求に埋め込まれた SCSI コマンドの有効性をチェックしません。