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


структура STORAGE_REQUEST_BLOCK (srb.h)

STORAGE_REQUEST_BLOCK — это структура блока запросов SCSI (SRB) в расширенном формате. Структура обеспечивает добавление расширенных данных, связанных с функцией SRB.

Примечание

Модели драйверов портов SCSI и драйверов мини-портов SCSI могут быть изменены или недоступны в будущем. Вместо этого используйте модели драйверов Storport и драйверов для мини-портов Storport .

Синтаксис

typedef struct _STORAGE_REQUEST_BLOCK {
  USHORT                               Length;
  UCHAR                                Function;
  UCHAR                                SrbStatus;
  ULONG                                ReservedUlong1;
  ULONG                                Signature;
  ULONG                                Version;
  ULONG                                SrbLength;
  ULONG                                SrbFunction;
  ULONG                                SrbFlags;
  ULONG                                ReservedUlong2;
  ULONG                                RequestTag;
  USHORT                               RequestPriority;
  USHORT                               RequestAttribute;
  ULONG                                TimeOutValue;
  union {
    ULONG SystemStatus;
    ULONG RequestTagHigh4Bytes;
  } DUMMYUNIONNAME;
  ULONG                                SystemStatus;
  ULONG                                ZeroGuard1;
  ULONG                                AddressOffset;
  ULONG                                NumSrbExData;
  ULONG                                DataTransferLength;
  PVOID POINTER_ALIGN                  DataBuffer;
  PVOID POINTER_ALIGN                  ZeroGuard2;
  PVOID POINTER_ALIGN                  OriginalRequest;
  PVOID POINTER_ALIGN                  ClassContext;
  PVOID POINTER_ALIGN                  PortContext;
  PVOID POINTER_ALIGN                  MiniportContext;
  _STORAGE_REQUEST_BLOCK POINTER_ALIGN *NextSrb;
  struct                               _STORAGE_REQUEST_BLOCK;
  ULONG                                SrbExDataOffset[ANYSIZE_ARRAY];
} STORAGE_REQUEST_BLOCK, *PSTORAGE_REQUEST_BLOCK;

Члены

Length

Указывает размер заголовка SRB для совместимости со структурой SCSI_REQUEST_BLOCK . Это равно смещению элемента Signature данной структуры.

Function

Задайте значение SRB_FUNCTION_STORAGE_REQUEST_BLOCK , чтобы указать, что это расширенный SRB. В отличие от SCSI_REQUEST_BLOCK идентификатор функции SRB находится в элементе SrbFunction .

SrbStatus

Возвращает состояние завершенного запроса. Этот член должен быть задан драйвером мини-порта, прежде чем он уведомляет драйвер операционной системы о завершении запроса путем вызова ScsiPortNotification с requestComplete. Значение этого элемента может быть одним из следующих:

Значение Значение
SRB_STATUS_PENDING (0x00) Указывает, что запрос выполняется. Драйвер порта операционной системы инициализирует SrbStatus этим значением.
SRB_STATUS_SUCCESS (0x01) Указывает, что запрос был успешно выполнен.
SRB_STATUS_ABORTED (0x02) Указывает, что запрос был прерван в соответствии с указаниями драйвера порта. Драйвер мини-порта задает это состояние в элементе NextSrb для успешного запроса SRB_FUNCTION_ABORT_COMMAND.
SRB_STATUS_ABORT_FAILED (0x03) Указывает, что попытка прервать запрос завершилась сбоем. Возвращает это состояние для запроса SRB_FUNCTION_ABORT_COMMAND, если указанный запрос не может быть найден.
SRB_STATUS_ERROR (0x04) Указывает, что запрос был выполнен с ошибкой в состоянии шины SCSI.
SRB_STATUS_BUSY (0x05) Указывает, что драйверу мини-порта или целевому устройству не удалось принять запрос в настоящее время. Драйвер порта операционной системы повторно отправляет запрос позже.
SRB_STATUS_INVALID_REQUEST (0x06) Указывает, что драйвер мини-порта не поддерживает данный запрос.
SRB_STATUS_INVALID_PATH_ID (0x07) Указывает, что PathId , указанный в SRB, не существует.
SRB_STATUS_NO_DEVICE (0x08) Указывает, что устройство не ответило.
SRB_STATUS_TIMEOUT (0x09) Указывает время ожидания запроса.
SRB_STATUS_SELECTION_TIMEOUT (0x0A) Указывает, что истекло время ожидания выбора устройства SCSI.
SRB_STATUS_COMMAND_TIMEOUT (0x0B) Указывает, что целевой объект не выполнил команду в течение предельного времени.
SRB_STATUS_MESSAGE_REJECTED (0x0D) Указывает, что цель отклонила сообщение. Обычно это значение возвращается только для таких запросов типа сообщений, как SRB_FUNCTION_TERMINATE_IO.
SRB_STATUS_BUS_RESET (0x0E) Указывает, что во время выполнения этого запроса произошел сброс шины.
SRB_STATUS_PARITY_ERROR (0x0F) Указывает, что на шине SCSI произошла ошибка четности и что повторная попытка завершилась сбоем.
SRB_STATUS_REQUEST_SENSE_FAILED (0x10) Указывает на сбой команды запроса. Возвращается только в том случае, если адаптер шины узла (HBA) выполняет функцию автозапроса, а драйвер мини-порта устанавливает для параметра AutoRequestSense значение TRUE в PORT_CONFIGURATION_INFORMATION для этого адаптера HBA.
SRB_STATUS_NO_HBA (0x11) Указывает, что HBA не отвечает.
SRB_STATUS_DATA_OVERRUN (0x12) Указывает, что произошла ошибка переполнения или недостаточного выполнения данных. Драйвер мини-порта также должен обновить элемент DataTransferLength SRB, чтобы указать, сколько данных фактически было передано в случае недостаточного выполнения.
SRB_STATUS_UNEXPECTED_BUS_FREE (0x13) Указывает, что целевой объект неожиданно отключен.
SRB_STATUS_PHASE_SEQUENCE_FAILURE (0x14) Указывает, что HBA обнаружил ошибку недопустимого сбоя последовательности этапов.
SRB_STATUS_BAD_SRB_BLOCK_LENGTH (0x15) Указывает, что запрос завершился сбоем из-за недопустимой длины SRB.
SRB_STATUS_REQUEST_FLUSHED (0x16) Указывает, что запрос на получение состояния был остановлен.
SRB_STATUS_INVALID_LUN (0x20) Указывает, что значение Lun в SRB является недопустимым.
SRB_STATUS_INVALID_TARGET_ID (0x21) Указывает, что значение TargetID в SRB является недопустимым.
SRB_STATUS_BAD_FUNCTION (0x22) Указывает, что код функции SRB не поддерживается.
SRB_STATUS_ERROR_RECOVERY (0x23) Указывает, что запрос был выполнен с ошибкой в состоянии шины SCSI и что было получено сообщение SCSI INITIAT RECOVERY.
SRB_STATUS_NOT_POWERED (0x24) Значение указывает, что запрос завершился сбоем, так как целевой объект не работает. Для запросов с SRB_FLAGS_NO_KEEP_AWAKE, заданных в SrbFlags, запросы, отправленные в LUN, которые отключены, завершаются ошибкой с этим состоянием.
SRB_STATUS_LINK_DOWN (0x25) Указывает, что запрос завершился сбоем, так как ссылка не работает.
SRB_STATUS_INTERNAL_ERROR (0x30) Указывает, что драйверу Storport не удалось доставить запрос драйверу мини-порта или целевому устройству. В таких случаях состояние записывается в InternalStatus.
SRB_STATUS_QUEUE_FROZEN (0x40) Драйвер мини-порта никогда не должен присваивать члену SrbStatus это значение. Драйвер порта Windows может задать это значение, чтобы сообщить драйверу класса хранения о том, что его очередь запросов для определенного периферийного устройства была заблокирована.
SRB_STATUS_AUTOSENSE_VALID (0x80) Указывает, что информация, возвращаемая в SenseInfoBuffer , является допустимой.

ReservedUlong1

Зарезервировано. Задайте значение 0.

Signature

Сигнатура расширенного формата SRB. Для этого параметра задано значение SRB_SIGNATURE.

Version

Используемая версия структуры. Текущая версия — STORAGE_REQUEST_BLOCK_VERSION_1.

SrbLength

Длина этого расширенного SRB в байтах, включая эту структуру, адрес и все расширенные данные SRB.

SrbFunction

Указывает выполняемую операцию, которая может иметь одно из следующих значений:

Значение Значение
SRB_FUNCTION_EXECUTE_SCSI (0x00) В целевой логической единице должен выполняться запрос ввода-вывода устройства SCSI. При использовании NumSrbExData> 0 одна или несколько из следующих расширенных блочных структур запросов находятся со смещениями, указанными в SrbExDataOffset: SRBEX_DATA_SCSI_CDB16, SRBEX_DATA_SCSI_CDB32, SRBEX_DATA_SCSI_CDB_VAR, SRBEX_DATA_BIDIRECTIONALSRBEX_DATA_IO_INFO
SRB_FUNCTION_IO_CONTROL (0x02) Запрос — это запрос элемента управления вводом-выводом, исходящий из приложения пользовательского режима с выделенным адаптером HBA. SRB DataBuffer указывает на заголовок SRB_IO_CONTROL , за которым следует область данных. Значение в DataBuffer может использоваться драйвером независимо от значения MapBuffers. Допустимы только члены функции SRB, SrbFlags, TimeOutValue, DataBuffer и DataTransferLength , а также член SrbExtension , если драйвер мини-порта запрашивал расширения SRB при инициализации. Если драйвер мини-порта управляет выделенным приложением HBA таким образом, чтобы он поддерживал этот запрос, драйвер мини-порта должен выполнить запрос и уведомить драйвер порта операционной системы о завершении SRB, используя обычный механизм вызовов ScsiPortNotification с requestComplete и NextRequest.
SRB_FUNCTION_RECEIVE_EVENT (0x03) HBA должен быть подготовлен к получению уведомления об асинхронном событии от адресного целевого объекта. Элемент SRB DataBuffer указывает место размещения данных. ПРИМЕЧАНИЕ. Эта функция не отправляется в минипорт от Storport.
SRB_FUNCTION_SHUTDOWN (0x07) Система завершает работу. Драйвер мини-порта может получить несколько таких уведомлений, прежде чем все действия системы фактически остановятся. Однако последнее уведомление о завершении работы будет появляться после последнего запуска ввода-вывода. Расширенные данные SRB не требуются для этой функции.
SRB_FUNCTION_FLUSH (0x08) Драйвер мини-порта должен очистить все кэшированные данные для целевого устройства. Этот запрос отправляется драйверу мини-порта только в том случае, если для параметра CachesData задано значение TRUE в PORT_CONFIGURATION_INFORMATION для адаптера HBA. Расширенные данные SRB не требуются для этой функции.
SRB_FUNCTION_ABORT_COMMAND (0x10) Чтобы отменить запрос, на который указывает участник NextSrb , должно быть отправлено SCSIMESS_ABORT сообщение. Если это запрос очереди с тегами, вместо него следует использовать SCSIMESS_ABORT_WITH_TAG сообщение. Если указанный запрос был выполнен, этот запрос должен быть выполнен в обычном режиме. Расширенные данные SRB не требуются для этой функции. ПРИМЕЧАНИЕ. Эта функция не отправляется в минипорт от Storport.
SRB_FUNCTION_RELEASE_RECOVERY (0x11) На целевой контроллер должно быть отправлено SCSIMESS_RELEASE_RECOVERY сообщение. Расширенные данные SRB не требуются для этой функции. ПРИМЕЧАНИЕ. Эта функция не отправляется в минипорт от Storport.
SRB_FUNCTION_RESET_BUS (0x12) Шина SCSI должна быть сброшена с помощью сообщения SCSIMESS_BUS_DEVICE_RESET. Драйвер мини-порта получает этот запрос только в том случае, если истекло время ожидания заданного запроса, а для последующего запроса на прерывание запроса истекло время ожидания. Расширенные данные SRB не требуются для этой функции.
SRB_FUNCTION_TERMINATE_IO (0x14) Чтобы отменить запрос, на который указывает участник NextSrb , должно быть отправлено SCSIMESS_TERMINATE_IO_PROCESS сообщение. Если указанный запрос уже выполнен, этот запрос должен быть выполнен в обычном режиме. Расширенные данные SRB не требуются для этой функции. ПРИМЕЧАНИЕ. Эта функция не отправляется в минипорт от Storport.
SRB_FUNCTION_RESET_DEVICE (0x16) Целевой контроллер SCSI должен быть сброшен с помощью сообщения SCSIMESS_BUS_DEVICE_RESET. Драйвер мини-порта должен выполнять все активные запросы для целевого контроллера. Расширенные данные SRB не требуются для этой функции.
SRB_FUNCTION_WMI (0x17) Запрос представляет собой расширенный запрос power, отформатированный в виде SRBEX_DATA_WMI структуры. Смещение данных расширенного запроса находится в SrbExDataOffset[0].
SRB_FUNCTION_LOCK_QUEUE (0x18) Содержит запросы, которые помещаются в очередь драйвером порта для определенной логической единицы, как правило, во время обработки запроса на питание. Допустимы только члены SRB Length, Function, SrbFlags и OriginalRequest . Если очередь заблокирована, будут обрабатываться только запросы с SrbFlags ORed с SRB_FLAGS_BYPASS_LOCKED_QUEUE . Драйверы мини-портов SCSI не обрабатывают запросы SRB_FUNCTION_LOCK_QUEUE .
SRB_FUNCTION_UNLOCK_QUEUE (0x19) Освобождает очередь драйвера порта для логического блока, который ранее был заблокирован SRB_FUNCTION_LOCK_QUEUE. SrbFlags запроса на разблокировку должен иметь значение ORed с SRB_FLAGS_BYPASS_LOCKED_QUEUE. Допустимы только члены SRB Length, Function, SrbFlags и OriginalRequest . Драйверы мини-портов SCSI не обрабатывают запросы SRB_FUNCTION_UNLOCK_QUEUE .
SRB_FUNCTION_QUIESCE_DEVICE (0x1A) Запрос выполняется только между классом хранения и драйвером порта хранения и не отправляется в мини-порт. Эта функция служит в качестве ожидания драйвера класса для драйвера порта для завершения всех невыполненных операций ввода-вывода.
SRB_FUNCTION_RESET_LOGICAL_UNIT (0x20) Если это возможно, логическая единица должна быть сброшена. Драйвер мини-порта HBA должен выполнять все активные запросы для логического блока. Расширенные данные SRB не требуются для этой функции. Storport поддерживает этот тип сброса, но порт SCSI — нет.
SRB_FUNCTION_POWER (0x24) Запрос представляет собой расширенный запрос power, отформатированный в виде SRBEX_DATA_POWER структуры. Смещение данных расширенного запроса находится в SrbExDataOffset[0].
SRB_FUNCTION_PNP (0x25) Запрос является расширенным запросом PnP в формате SRBEX_DATA_PNP структуры. Смещение данных расширенного запроса находится в SrbExDataOffset[0].
SRB_FUNCTION_DUMP_POINTERS (0x26) Запрос с этой функцией отправляется в драйвер мини-порта Storport, который используется для управления диском, на котором хранятся данные аварийного дампа. Запрос собирает сведения, необходимые от драйвера мини-порта для поддержки аварийного дампа и гибернации. См . структуру MINIPORT_DUMP_POINTERS . Чтобы получить запрос с этой функцией, физический драйвер мини-порта должен установить флаг STOR_FEATURE_DUMP_POINTERS в элементе FeatureSupport своего HW_INITIALIZATION_DATA .
SRB_FUNCTION_FREE_DUMP_POINTERS (0x27) Запрос с этой функцией отправляется драйверу мини-порта Storport, чтобы освободить все ресурсы, выделенные во время предыдущего запроса на SRB_FUNCTION_DUMP_POINTERS.

SrbFlags

Указывает различные параметры и параметры для запроса. SrbFlags доступен только для чтения, за исключением случаев, когда задано SRB_FLAGS_UNSPECIFIED_DIRECTION и для обновления SRB_FLAGS_DATA_IN или SRB_FLAGS_DATA_OUT требуются драйверы мини-портов подчиненных адаптеров DMA. Этот элемент может иметь один или несколько из этих флагов.

Flag Значение
SRB_FLAGS_NO_DATA_TRANSFER (0x00000000) Указывает на отсутствие передачи данных с этим запросом. Если этот параметр задан, флаги SRB_FLAGS_DATA_OUT, SRB_FLAGS_DATA_IN и SRB_FLAGS_UNSPECIFIED_DIRECTION будут ясны.
SRB_FLAGS_QUEUE_ACTION_ENABLE (0x00000002) Указывает, что необходимо включить действия очереди с тегами.
SRB_FLAGS_DISABLE_DISCONNECT (0x00000004) Указывает, что HBA не должен разрешать целевому объекту отключаться от шины SCSI во время обработки этого запроса.
SRB_FLAGS_DISABLE_SYNCH_TRANSFER (0x00000008) Указывает, что HBA, если это возможно, должен выполнять асинхронные операции ввода-вывода для этого запроса на передачу. Если синхронные операции ввода-вывода были согласованы ранее, перед выполнением передачи адаптеру HBA необходимо пересмотреть согласование для асинхронного ввода-вывода.
SRB_FLAGS_BYPASS_FROZEN_QUEUE (0x00000010) Этот флаг не имеет отношения к драйверам мини-портов.
SRB_FLAGS_DISABLE_AUTOSENSE (0x00000020) Указывает, что не следует возвращать сведения о смысле запроса.
SRB_FLAGS_DATA_IN (0x00000040) Указывает, что данные будут передаваться с устройства в систему.
SRB_FLAGS_DATA_OUT (0x00000080) Указывает, что данные будут передаваться из системы на устройство.
SRB_FLAGS_UNSPECIFIED_DIRECTION (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT) Этот флаг, определенный для обратной совместимости с интерфейсами SCSI ASPI/CAM, указывает, что направление передачи может быть любой из предыдущих, так как установлены оба предыдущих флага. Если этот флаг установлен, драйвер мини-порта должен определить направление передачи, проверив этап данных для целевого объекта на шине SCSI.
SRB_FLAGS_NO_QUEUE_FREEZE (0x00000100) Этот флаг не имеет отношения к драйверам мини-портов.
SRB_FLAGS_ADAPTER_CACHE_ENABLE (0x00000200) Указывает, что адаптер может кэшировать данные.
SRB_FLAGS_FREE_SENSE_BUFFER (0x00000400) Указывает, что порт или драйвер минипорта выделили буфер для данных контроля. Это сообщает драйверу класса, что он должен освободить буфер данных осмысления после извлечения данных.
SRB_FLAGS_D3_PROCESSING (0x00000800) Указывает, что запрос является частью обработки D3. Минипорты, поддерживающие управление питанием среды выполнения, не должны вызывать StorPortPoFxActivateComponent или StorPortPoFxIdleComponent с этими запросами.
SRB_FLAGS_SEQUENTIAL_REQUIRED (0x00001000) Указывает, что диапазон LBA попадает в необходимую зону последовательной записи.
SRB_FLAGS_IS_ACTIVE (0x00010000) Этот флаг не имеет отношения к драйверам мини-портов.
SRB_FLAGS_ALLOCATED_FROM_ZONE (0x00020000) Этот флаг не имеет отношения к драйверам мини-портов и устарел для новых драйверов класса Windows. Для устаревшего драйвера класса Windows это указывает, был ли SRB выделен из буфера зоны. Если этот флаг установлен, драйвер класса должен вызвать ExInterlockedFreeToZone , чтобы освободить SRB; В противном случае он должен вызывать ExFreePool. Новые драйверы классов должны использовать списки lookaside, а не буферы зоны.
SRB_FLAGS_SGLIST_FROM_POOL (0x00040000) Этот флаг не имеет отношения к драйверам мини-портов. Для драйвера класса это означает, что память для точечных и собираемых списков была выделена из непагрегированного пула. Если этот флаг установлен, драйвер класса должен вызвать ExFreePool , чтобы освободить память после завершения SRB.
SRB_FLAGS_BYPASS_LOCKED_QUEUE (0x00080000) Этот флаг не имеет отношения к драйверам мини-портов. Для драйвера порта этот флаг указывает, что запрос должен быть обработан независимо от того, заблокирована ли очередь логических единиц. Драйвер более высокого уровня должен установить этот флаг для отправки запроса SRB_FUNCTION_UNLOCK_QUEUE .
SRB_FLAGS_NO_KEEP_AWAKE (0x00100000) Этот флаг не имеет отношения к драйверам мини-портов. Драйвер класса Windows использует этот флаг, чтобы указать драйверу порта на сбой запроса, а не для включения устройства для обработки этого запроса.
SRB_FLAGS_PORT_DRIVER_ALLOCSENSE (0x00200000) Драйвер порта должен выделить буфер чувств для SRB.
SRB_FLAGS_PORT_DRIVER_SENSEHASPORT (0x00400000) Не рекомендуется; не использовать.
SRB_FLAGS_DONT_START_NEXT_PACKET (0x00800000) Не рекомендуется; не использовать.
SRB_FLAGS_PORT_DRIVER_RESERVED (0x0F000000) Зарезервировано для системного использования.
SRB_FLAGS_CLASS_DRIVER_RESERVED (0xF0000000) Зарезервировано для системного использования.

ReservedUlong2

Зарезервировано. Задайте значение 0.

RequestTag

Содержит значение тега очереди, назначенное драйвером порта операционной системы. Если этот элемент используется для постановки в очередь с тегами, HBA поддерживает внутреннюю очередь запросов к логическим единицам , а драйвер мини-порта задает для taggedQueueing значение TRUE в PORT_CONFIGURATION_INFORMATION для этого адаптера HBA.

RequestPriority

Назначение приоритета для SRB. Это одно из следующих _STOR_IO_PRIORITY_HINT значений :

Значение Значение
StorIoPriorityVeryLow (0) Очень низкий приоритет.
StorIoPriorityLow (1) Низкий приоритет.
StorIoPriorityNormal (2) Обычный приоритет.
StorIoPriorityHigh (3) Высокий приоритет.
StorIoPriorityCritical (4) Критический приоритет.

RequestAttribute

Указывает сообщение с тегами о очереди, которое будет использоваться при установке флага SRB_FLAGS_QUEUE_ACTION_ENABLE . Значение может быть одним из следующих: SRB_SIMPLE_TAG_REQUEST, SRB_HEAD_OF_QUEUE_TAG_REQUEST или SRB_ORDERED_QUEUE_TAG_REQUEST.

TimeOutValue

Указывает интервал (в секундах), который может выполнить запрос, прежде чем драйвер порта операционной системы может считать, что истекло время ожидания. Драйверы мини-портов не требуются для запросов времени, так как драйвер порта уже это делает.

DUMMYUNIONNAME

Внедренное объединение.

DUMMYUNIONNAME.SystemStatus

Используется для хранения сведений о состоянии сбоя системы в условиях сбоя SrbStatus (например, SRB_STATUS_INTERNAL_ERROR).

DUMMYUNIONNAME.RequestTagHigh4Bytes

Используется для хранения четырех байтов уникального тега, если включена функция уникального тега.

SystemStatus

Используется драйвером Storport вместо SrbStatus, чтобы сообщать о состоянии завершенного запроса всякий раз, когда запрос не может быть доставлен драйверу мини-порта. В таких случаях SrbStatus имеет значение SRB_STATUS_INTERNAL_ERROR. Этот элемент используется исключительно для обмена данными между Storport и драйвером класса и не должен использоваться драйверами мини-портов.

ZeroGuard1

Защитная область для защиты от драйверов, которые интерпретируют эту структуру как SCSI_REQUEST_BLOCK. Задайте значение 0.

AddressOffset

Смещение адреса запроса хранилища от начала этой структуры. Это смещение находит структуру STOR_ADDRESS , содержащую адрес запроса.

NumSrbExData

Количество расширенных блоков данных SRB для этого запроса.

DataTransferLength

Указывает размер буфера данных (в байтах). Если происходит недостаточное выполнение, драйвер мини-порта должен обновить этот элемент до количества фактически переданных байтов.

DataBuffer

Указывает на буфер данных. Драйверы мини-портов не должны использовать это значение в качестве указателя данных, если драйвер мини-порта не устанавливает mapBuffers значение TRUE в PORT_CONFIGURATION_INFORMATION для адаптера HBA. Однако в случае SRB_FUNCTION_IO_CONTROL запросов драйверы мини-портов могут использовать это значение в качестве указателя данных независимо от значения MapBuffers.

ZeroGuard2

Защитная область для защиты от драйверов, которые интерпретируют эту структуру как SCSI_REQUEST_BLOCK. Задайте значение 0.

OriginalRequest

Указывает на IRP для этого запроса. Этот член не имеет отношения к драйверам минипорта.

ClassContext

Указывает на данные контекста драйвера класса для этого запроса. Этот член не имеет отношения к драйверам минипорта.

PortContext

Указывает на данные контекста драйвера порта для этого запроса. Этот член не имеет отношения к драйверам минипорта.

MiniportContext

Указывает на расширение Srb. Драйвер мини-порта не должен использовать этот член, если для SrbExtensionSize задано нулевое значение в HW_INITIALIZATION_DATA. Память в MiniportContext не инициализируется драйвером порта, зависящим от операционной системы, и к данным, определяемым драйвером мини-порта, можно получить непосредственно с помощью адаптера HBA. Соответствующий физический адрес можно получить, вызвав ScsiPortGetPhysicalAddress с указателем MiniportContext .

NextSrb

Указывает STORAGE_REQUEST_BLOCK , к которому применяется этот запрос. Только небольшое подмножество запросов использует второй SRB, например SRB_FUNCTION_ABORT_COMMAND.

_STORAGE_REQUEST_BLOCK

SrbExDataOffset[ANYSIZE_ARRAY]

Массив смещения, указывающий расположение расширенных блоков данных для SRB. Этот массив пуст, если NumSrbExData = 0.

Комментарии

Начиная с Windows 8, расширенный тип SRB поддерживается с использованием структуры STORAGE_REQUEST_BLOCK. STORAGE_REQUEST_BLOCK расширяет функции SRB, позволяя добавлять в запрос расширенные блоки данных для функции SRB. Поддержка запросов SRB с использованием структуры SCSI_REQUEST_BLOCK будет продолжена.

Если значение NumSrbExData> 0, смещения для расширенных блоков данных SRB находятся в массиве SrbExDataOffset . Каждое смещение относится к началу этой структуры и указывает на SRBEX_DATA структуру, содержащую расширенный блок данных.

Адрес целевого устройства для SRB находится в STOR_ADDRESS структуре, указанной параметром AddressOffset.

Требования

Требование Значение
Минимальная версия клиента Windows 8
Верхняя часть srb.h (включая Storport.h, Srb.h, Minitape.h)

См. также раздел