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                 FixedProtocolReturnData2;
  ULONG                 Reserved1[2];
  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

命令的长度(以字节为单位)。 调用方必须将其设置为非零值。

ErrorInfoLength

ErrorCode 缓冲区的长度(以字节为单位)。 这是可选的,可以设置为 0。

DataToDeviceTransferLength

要传输到设备的缓冲区的大小。

DataFromDeviceTransferLength

要从设备传输的缓冲区大小。

TimeOutValue

指定设备在超时之前等待的时间。这是以秒为单位设置的。

ErrorInfoOffset

ErrorCode 缓冲区的偏移量。 这必须是指针对齐的。

DataToDeviceBufferOffset

要传输到设备的缓冲区的偏移量。 这必须是指针对齐的,并且仅用于 WRITE 请求。

DataFromDeviceBufferOffset

要从设备传输的缓冲区的偏移量。 这必须是指针对齐的,并且仅用于 READ 请求。

CommandSpecific

随 Command 一起传递的其他特定于 命令的数据。 这取决于驱动程序中的命令,并且是可选的。

Reserved0

保留供将来使用。

FixedProtocolReturnData

返回数据。 这是可选的。 某些协议(如 NVMe)可能会从完成队列输入) 返回少量 (DWORD0 的数据,而无需单独的设备数据传输。

FixedProtocolReturnData2

返回 data2。 这是可选的。 某些协议(如 NVMe)可能会从完成队列输入) 返回少量数据 (DWORD1,而无需单独的设备数据传输。

Reserved1[2]

保留供将来使用。

Command[ANYSIZE_ARRAY]

要传递给设备的特定于供应商的命令。

要求

要求
最低受支持的客户端 Windows 10
最低受支持的服务器 Windows Server 2016
标头 ntddstor.h (包括 Ntddstor.h)

另请参阅