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


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

См. также