SCSI_PASS_THROUGH_DIRECT_EX 構造体 (ntddscsi.h)
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
この構造のサイズ。 sizeof(SCSI_PASS_THROUGH_DIRECT_EX) に設定します。
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 以降で使用できます。 |
Header | ntddscsi.h (Ntddscsi.h を含む) |
こちらもご覧ください
IOCTL_SCSI_PASS_THROUGH_DIRECT_EX