STORAGE_PROTOCOL_COMMAND 结构 (winioctl.h)

使用直通机制向存储设备发出特定于供应商的命令时,此结构用作输入缓冲区(通过 IOCTL_STORAGE_PROTOCOL_COMMAND)。

语法

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

成员

Version

此结构的版本。 应将其设置为 STORAGE_PROTOCOL_STRUCTURE_VERSION

Length

此结构的大小。 这应设置为 sizeof (STORAGE_PROTOCOL_COMMAND) 。

ProtocolType

协议类型,类型 为 STORAGE_PROTOCOL_TYPE

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

错误缓冲区的长度。 这是可选的设置,可以设置为 0。

DataToDeviceTransferLength

要传输到设备的缓冲区的大小。 这仅与 WRITE 请求一起使用。

DataFromDeviceTransferLength

要从设备传输的缓冲区大小。 这仅适用于 READ 请求。

TimeOutValue

等待设备到超时的时长。此值以秒为单位进行设置。

ErrorInfoOffset

错误缓冲区的偏移量。 这必须与指针对齐。

DataToDeviceBufferOffset

要传输到设备的缓冲区的偏移量。 它必须与指针对齐,并且仅与 WRITE 请求一起使用。

DataFromDeviceBufferOffset

要从设备传输的缓冲区的偏移量。 它必须与指针对齐,并且仅与 READ 请求一起使用。

CommandSpecific

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

Reserved0

保留供将来使用。

FixedProtocolReturnData

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

FixedProtocolReturnData2

Reserved1[2]

保留供将来使用。

Command[ANYSIZE_ARRAY]

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

要求

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

另请参阅

IOCTL_STORAGE_PROTOCOL_COMMAND