Поделиться через


структура 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

Флаги, заданные для этого запроса. Ниже приведены допустимые флаги.

Flag Описание
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