STORAGE_PROTOCOL_COMMAND 構造体 (ntddstor.h)

この構造は、ベンダー固有のプロトコル コマンドをストレージ デバイスに発行する IOCTL_STORAGE_PROTOCOL_COMMAND パススルー メカニズムで使用されます。

構文

typedef struct _STORAGE_PROTOCOL_COMMAND {
  ULONG                 Version;
  ULONG                 Length;
  STORAGE_PROTOCOL_TYPE ProtocolType;
  ULONG                 Flags;
  ULONG                 ReturnStatus;
  ULONG                 ErrorCode;
  ULONG                 CommandLength;
  ULONG                 ErrorInfoLength;
  ULONG                 DataToDeviceTransferLength;
  ULONG                 DataFromDeviceTransferLength;
  ULONG                 TimeOutValue;
  ULONG                 ErrorInfoOffset;
  ULONG                 DataToDeviceBufferOffset;
  ULONG                 DataFromDeviceBufferOffset;
  ULONG                 CommandSpecific;
  ULONG                 Reserved0;
  ULONG                 FixedProtocolReturnData;
  ULONG                 Reserved1[3];
  UCHAR                 Command[ANYSIZE_ARRAY];
} STORAGE_PROTOCOL_COMMAND, *PSTORAGE_PROTOCOL_COMMAND;

メンバー

Version

この構造体のバージョン。 これを STORAGE_PROTOCOL_STRUCTURE_VERSIONに設定します。

Length

この構造のサイズ。 これを sizeof(STORAGE_PROTOCOL_COMMAND) に設定します。

ProtocolType

プロトコルの種類。

Flags

この要求に設定されたフラグ。 有効なフラグを次に示します。

フラグ 説明
STORAGE_PROTOCOL_COMMAND_FLAG_ADAPTER_REQUEST このフラグは、デバイスではなくアダプターをターゲットにする要求を示します。

ReturnStatus

ストレージ デバイスに対して行われた要求の状態。 Windows 10で返すことができる値は次のとおりです。

ステータス値 説明
STORAGE_PROTOCOL_STATUS_PENDING 要求は保留中です。
STORAGE_PROTOCOL_STATUS_SUCCESS 要求が正常に完了しました。
STORAGE_PROTOCOL_STATUS_ERROR 要求でエラーが発生しました。
STORAGE_PROTOCOL_STATUS_INVALID_REQUEST 要求が無効です。
STORAGE_PROTOCOL_STATUS_NO_DEVICE 要求を行うためにデバイスを使用できません。
STORAGE_PROTOCOL_STATUS_BUSY デバイスが要求に対して動作中です。
STORAGE_PROTOCOL_STATUS_DATA_OVERRUN 要求に対する操作中に、デバイスでデータ オーバーランが発生しました。
STORAGE_PROTOCOL_STATUS_INSUFFICIENT_RESOURCES リソースが不足しているため、デバイスは要求を完了できません。
STORAGE_PROTOCOL_STATUS_NOT_SUPPORTED 要求はサポートされていません。

ErrorCode

この要求に対して返されるバス固有のプロトコル エラー コード。 これは必要に応じて設定されます。

CommandLength

コマンドの長さ (バイト単位)。 呼び出し元はこれを 0 以外の値に設定する必要があります。

ErrorInfoLength

ErrorCode バッファーの長さ (バイト単位)。 これは必要に応じて設定され、0 に設定できます。

DataToDeviceTransferLength

デバイスに転送されるバッファーのサイズ。

DataFromDeviceTransferLength

デバイスから転送されるバッファーのサイズ。

TimeOutValue

タイムアウトになるまでデバイスを待機する時間を指定します。これは秒単位で設定されます。

ErrorInfoOffset

ErrorCode バッファーのオフセット。 これはポインターを合わせる必要があります。

DataToDeviceBufferOffset

デバイスに転送されるバッファーのオフセット。 これはポインターに合わせて配置する必要があり、WRITE 要求でのみ使用されます。

DataFromDeviceBufferOffset

デバイスから転送されるバッファーのオフセット。 これはポインターに合わせて配置する必要があり、READ 要求でのみ使用されます。

CommandSpecific

コマンドと共に渡される追加の コマンド固有のデータ。 これはドライバーからのコマンドによって異なり、必要に応じて設定されます。

Reserved0

将来利用するために予約されています。

FixedProtocolReturnData

返されるデータ。 これは必要に応じて設定されます。 NVMe などの一部のプロトコルでは、個別のデバイス データ転送を必要とせずに、少量のデータ (完了キューエントリから DWORD0) を返す場合があります。

Reserved1[3]

将来利用するために予約されています。

Command[ANYSIZE_ARRAY]

デバイスに渡されるベンダー固有のコマンド。

要件

要件
サポートされている最小のクライアント Windows 10
サポートされている最小のサーバー Windows Server 2016
Header ntddstor.h (Ntddstor.h を含む)

こちらもご覧ください

IOCTL_STORAGE_PROTOCOL_COMMAND