структура 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
Возвращаемые данные2. Это необязательно. Некоторые протоколы, такие как NVMe, могут возвращать небольшие данные (DWORD1 из записи очереди завершения) без необходимости отдельной передачи данных устройства.
Reserved1[2]
Зарезервировано для дальнейшего использования.
Command[ANYSIZE_ARRAY]
Команда для конкретного поставщика, передаваемая устройству.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 10 |
минимальный поддерживаемый сервер | Windows Server 2016 |
заголовка | ntddstor.h (include Ntddstor.h) |