SCSI_PASS_THROUGH_EX 構造体 (ntddscsi.h)
SCSI_PASS_THROUGH_EX構造体は、埋め込み SCSI コマンドをターゲット デバイスに送信するようにポート ドライバーに指示するIOCTL_SCSI_PASS_THROUGH_EX要求と組み合わせて使用されます。 SCSI_PASS_THROUGH_EX には、双方向データ転送と可変長コマンド データ ブロックを含めることができます。
注意
SCSI ポート ドライバーと SCSI ミニポート ドライバー モデルは、今後変更または使用できない可能性があります。 代わりに、 Storport ドライバー モデルと Storport ミニポート ドライバー モデルを使用します。
構文
typedef struct _SCSI_PASS_THROUGH_EX {
ULONG Version;
ULONG Length;
ULONG CdbLength;
ULONG StorAddressLength;
UCHAR ScsiStatus;
UCHAR SenseInfoLength;
UCHAR DataDirection;
UCHAR Reserved;
ULONG TimeOutValue;
ULONG StorAddressOffset;
ULONG SenseInfoOffset;
ULONG DataOutTransferLength;
ULONG DataInTransferLength;
ULONG_PTR DataOutBufferOffset;
ULONG_PTR DataInBufferOffset;
UCHAR Cdb[ANYSIZE_ARRAY];
} SCSI_PASS_THROUGH_EX, *PSCSI_PASS_THROUGH_EX;
メンバー
Version
この構造体のバージョン。 0 に設定されます。
Length
この構造体のサイズ (バイト単位)。 sizeof(SCSI_PASS_THROUGH_EX)
を設定します。
CdbLength
Cdb の SCSI コマンド記述子ブロックのサイズ (バイト単位)。
StorAddressLength
この構造体の後の StorAddressOffset のオフセットにあるストレージ デバイス アドレス構造の長さ (バイト単位)。
ScsiStatus
HBA またはターゲット デバイスによって返された SCSI 状態を報告します。
SenseInfoLength
要求検出バッファーのサイズ (バイト単位)。 このメンバーは省略可能であり、0 に設定できます。
DataDirection
SCSI コマンドがデータの読み取りまたは書き込みを行うかどうかを示します。 このフィールドは、次のいずれかの値である必要があります。
値 | 意味 |
---|---|
SCSI_IOCTL_DATA_OUT | デバイスにデータを書き込みます。 |
SCSI_IOCTL_DATA_IN | デバイスからデータを読み取ります。 |
SCSI_IOCTL_DATA_UNSPECIFIED | データは転送されません。 |
SCSI_IOCTL_DATA_BIDIRECTIONAL | データは入力と出力の両方に対して有効です。 |
Reserved
予約済み。 0 に設定されます。
TimeOutValue
ポート ドライバーがタイムアウトと見なす前に要求が実行できる間隔を秒単位で示します。
StorAddressOffset
この構造体の先頭からのターゲット ストレージ デバイス アドレス構造の場所 (バイト単位)。
SenseInfoOffset
この構造体の先頭から要求検出バッファーへのオフセット。 要求センス バッファーが存在しない場合は、0 に設定します。
DataOutTransferLength
出力データ バッファーのサイズをバイト単位で示します。 多くのデバイスは、定義済みの長さのデータのチャンクを転送します。 DataOutTransferLength の値は、デバイスで指定される、この定義済みの最小長の整数倍数である必要があります。 アンダーランが発生した場合、ミニポート ドライバーは、実際に転送されたバイト数にこのメンバーを更新する必要があります。 出力データ バッファーが存在しない場合、このメンバーは 0 に設定されます。
DataInTransferLength
入力データ バッファーのサイズをバイト単位で示します。 多くのデバイスは、定義済みの長さのデータのチャンクを転送します。 DataInTransferLength の値は、デバイスで指定されるこの定義済みの最小長の整数倍数である必要があります。 アンダーランが発生した場合、ミニポート ドライバーは、実際に転送されたバイト数にこのメンバーを更新する必要があります。 入力データ バッファーが存在しない場合、このメンバーは 0 に設定されます。
DataOutBufferOffset
この構造体の先頭から出力データ バッファーまでのオフセットを格納します。 オフセットは、デバイスのデータアラインメント要件を考慮する必要があります。
DataInBufferOffset
この構造体の先頭から入力データ バッファーまでのオフセットを格納します。 オフセットは、デバイスのデータアラインメント要件を考慮する必要があります。
Cdb[ANYSIZE_ARRAY]
ターゲット デバイスに送信する SCSI コマンド記述子ブロックを指定します。
注釈
SCSI_PASS_THROUGH_EX構造体は、バッファーされたデバイス制御要求であるIOCTL_SCSI_PASS_THROUGH_EX制御コードと共に使用されます。 システム メモリ内のバッファリングをバイパスするには、呼び出し元は IOCTL_SCSI_PASS_THROUGH_DIRECT_EX を使用する必要があります。 IOCTL_SCSI_PASS_THROUGH_DIRECT_EX要求を処理する場合、システムはユーザー メモリ内のバッファーをロックダウンし、デバイスはこのメモリに直接アクセスします。
注意
64 ビット バージョンの Windows で実行されるドライバーは、32 ビット プロセスからの IOCTL_SCSI_PASS_THROUGH_EX 要求を処理するときに 、SCSI_PASS_THROUGH32_EX 構造体を要求データ型として使用する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8 以降で使用できます。 |
Header | ntddscsi.h (Ntddscsi.h を含む) |