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