SCSI_PASS_THROUGH_DIRECT_EX 構造体は、埋め込み SCSI コマンドをターゲット デバイスに送信するようにポート ドライバーに指示する IOCTL_SCSI_PASS_THROUGH_DIRECT_EX 要求と組み合わせて使用されます。 SCSI_PASS_THROUGH_DIRECT_EX には、双方向データ転送と可変長コマンド データ ブロックを含めることができます。
手記
SCSI ポート ドライバーと SCSI ミニポート ドライバー モデルは、今後変更または使用できない可能性があります。 代わりに、Storport ドライバー を使用し、Storport ミニポート ドライバー モデル することをお勧めします。
構文
typedef struct _SCSI_PASS_THROUGH_DIRECT_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;
VOID *DataOutBuffer;
VOID *DataInBuffer;
UCHAR Cdb[ANYSIZE_ARRAY];
} SCSI_PASS_THROUGH_DIRECT_EX, *PSCSI_PASS_THROUGH_DIRECT_EX;
メンバーズ
Version
この構造体のバージョン。 0 に設定します。
Length
この構造体のサイズ。 (SCSI_PASS_THROUGH_DIRECT_EX) の size をに設定します。
CdbLength
Cdbの SCSI コマンド記述子ブロックのサイズ (バイト単位) を示します。
StorAddressLength
この構造体の後に StorAddressOffset のオフセットにあるストレージ デバイス アドレス構造の長さ。 これは、の sizeof (STOR_ADDR_BTL8) をに設定されます。
ScsiStatus
HBA またはターゲット デバイスによって返された SCSI 状態を報告します。
SenseInfoLength
要求検出バッファーのサイズをバイト単位で示します。 このメンバーは省略可能であり、0 に設定できます。
DataDirection
このフィールドには、次のいずれかの値が必要です。
データ転送の種類 | 意味 |
---|---|
SCSI_IOCTL_DATA_IN | デバイスからデータを読み取ります。 |
SCSI_IOCTL_DATA_OUT | デバイスにデータを書き込みます。 |
SCSI_IOCTL_DATA_UNSPECIFIED | データは転送されません。 |
SCSI_IOCTL_DATA_BIDIRECTIONAL | データは入力と出力の両方で有効です。 |
Reserved
引っ込み思案。 0 に設定します。
TimeOutValue
ポート ドライバーがタイムアウトと見なす前に要求を実行できる間隔を秒単位で示します。
StorAddressOffset
ターゲット デバイスの STOR_ADDR_BTL8 アドレス構造の位置 (バイト単位)。
SenseInfoOffset
この構造体の先頭から要求検出バッファーへのオフセット。 要求センス バッファーが存在しない場合は 0 に設定します。
DataOutTransferLength
出力データ バッファーのサイズをバイト単位で示します。 多くのデバイスは、定義済みの長さのデータのチャンクを転送します。 DataOutTransferLength の値は、デバイスで指定されるこの定義済みの最小長の整数倍数である必要があります。 アンダーランが発生した場合、ミニポート ドライバーは、実際に転送されたバイト数にこのメンバーを更新する必要があります。 出力データ バッファーが存在しない場合、このメンバーは 0 に設定されます。
DataInTransferLength
入力データ バッファーのサイズをバイト単位で示します。 多くのデバイスは、定義済みの長さのデータのチャンクを転送します。 DataInTransferLength の値は、デバイスで指定される、この定義済みの最小長の整数倍数である必要があります。 アンダーランが発生した場合、ミニポート ドライバーは、実際に転送されたバイト数にこのメンバーを更新する必要があります。 入力データ バッファーが存在しない場合、このメンバーは 0 に設定されます。
DataOutBuffer
出力データ バッファーへのポインター。
DataInBuffer
入力データ バッファーへのポインター。
Cdb[ANYSIZE_ARRAY]
ターゲット デバイスに送信する SCSI コマンド記述子ブロックを指定します。
備考
SCSI_PASS_THROUGH_DIRECT_EX 構造体は、IOCTL_SCSI_PASS_THROUGH_DIRECT_EXと共に使用されます。 この要求により、システムはユーザー メモリ内のバッファーをロックダウンし、デバイスはこのメモリに直接アクセスします。 このデバイス制御要求と同等のダブル バッファーについては、IOCTL_SCSI_PASS_THROUGH_EX と SCSI_PASS_THROUGH_EXに関するページを参照してください。
手記
64 ビット バージョンの Windows で実行されるドライバーは、32 ビット プロセスからの IOCTL_SCSI_PASS_THROUGH_DIRECT_EX 要求を処理するときに、SCSI_PASS_THROUGH_DIRECT32_EX 構造体を要求データ型として使用する必要があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8 以降で使用できます。 |
ヘッダー | ntddscsi.h (Ntddscsi.h を含む) |
関連項目
IOCTL_SCSI_PASS_THROUGH_DIRECT_EX