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


структура HW_INITIALIZATION_DATA (storport.h)

Структура HW_INITIALIZATION_DATA (Storport) содержит сведения, определенные для каждого драйвера минипорта и оборудования, которым управляет драйвер минипорта.

Синтаксис

typedef struct _HW_INITIALIZATION_DATA {
  ULONG                       HwInitializationDataSize;
  INTERFACE_TYPE              AdapterInterfaceType;
  PHW_INITIALIZE              HwInitialize;
  PHW_STARTIO                 HwStartIo;
  PHW_INTERRUPT               HwInterrupt;
  PVOID                       HwFindAdapter;
  PHW_RESET_BUS               HwResetBus;
  PHW_DMA_STARTED             HwDmaStarted;
  PHW_ADAPTER_STATE           HwAdapterState;
  ULONG                       DeviceExtensionSize;
  ULONG                       SpecificLuExtensionSize;
  ULONG                       SrbExtensionSize;
  ULONG                       NumberOfAccessRanges;
  PVOID                       Reserved;
  UCHAR                       MapBuffers;
  BOOLEAN                     NeedPhysicalAddresses;
  BOOLEAN                     TaggedQueuing;
  BOOLEAN                     AutoRequestSense;
  BOOLEAN                     MultipleRequestPerLu;
  BOOLEAN                     ReceiveEvent;
  USHORT                      VendorIdLength;
  PVOID                       VendorId;
  union {
    USHORT ReservedUshort;
    USHORT PortVersionFlags;
  };
  USHORT                      DeviceIdLength;
  PVOID                       DeviceId;
  PHW_ADAPTER_CONTROL         HwAdapterControl;
  PHW_BUILDIO                 HwBuildIo;
  PHW_FREE_ADAPTER_RESOURCES  HwFreeAdapterResources;
  PHW_PROCESS_SERVICE_REQUEST HwProcessServiceRequest;
  PHW_COMPLETE_SERVICE_IRP    HwCompleteServiceIrp;
  PHW_INITIALIZE_TRACING      HwInitializeTracing;
  PHW_CLEANUP_TRACING         HwCleanupTracing;
  PHW_TRACING_ENABLED         HwTracingEnabled;
  ULONG                       FeatureSupport;
  ULONG                       SrbTypeFlags;
  ULONG                       AddressTypeFlags;
  ULONG                       Reserved1;
  PHW_UNIT_CONTROL            HwUnitControl;
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;

Члены

HwInitializationDataSize

Задает размер этой структуры в байтах, возвращаемую sizeof(HW_INITIALIZATION_DATA). В действительности этот элемент указывает версию этой структуры, используемой драйвером мини-порта. Подпрограмма DriverEntry драйвера miniport должна задать значение этого члена для драйвера порта.

AdapterInterfaceType

Драйвер Storport не поддерживает устаревшие автобусы. Поэтому большинство типов интерфейсов адаптера, используемых с драйвером портов SCSI, недопустимы для Storport. В частности, Иса, Эйза, MicroChannelи TurboChannel не поддерживаются. Кроме того, в отличие от регистра порта SCSI, мини-драйвер, который работает с драйвером Storport, не требуется для предоставления значений для VendorIdLength, VendorId, DeviceIdLengthи элементов DeviceId.

HwInitialize

Указатель на драйвера минипорта HwStorInitialize подпрограмму, которая является обязательной точкой входа для всех драйверов минипорта.

HwStartIo

Указатель на подпрограмму драйвера минипорта HwStorStartIo, которая является обязательной точкой входа для всех драйверов минипорта.

HwInterrupt

Указатель на драйвера минипорта HwStorInterrupt подпрограммы, которая является обязательной точкой входа для всех драйверов минипорта.

HwFindAdapter

Указатель на драйвера мини-порта HwStorFindAdapter подпрограммы, которая является обязательной точкой входа для всех драйверов минипорта.

HwResetBus

Указатель на подпрограмму драйвера минипорта HwStorResetBus, которая является обязательной точкой входа для всех драйверов минипорта.

HwDmaStarted

Драйвер Storport не поддерживает DMA в подчиненном режиме. Поэтому этот элемент должен быть NULL.

HwAdapterState

Драйвер Storport не поддерживает устаревшие драйверы. Поэтому этот элемент должен быть NULL.

DeviceExtensionSize

Указывает размер в байтах, необходимый мини-драйверу для расширения устройства для каждого адаптера. Мини-порт драйвер использует свое расширение устройства в качестве хранилища для сведений адаптера шины узла(HBA). Драйвер порта для конкретной операционной системы инициализирует каждое расширение устройства один раз, когда он сначала выделяет расширение и заполняет его нулями. Он передает указатель на расширение устройства hBA в каждом вызове минипорта драйвера. Указанный размер не включает в себя запрошенное мини-драйвером хранилище для логического блока. Размер хранилища для каждого логического блока указывается с помощью поля SpecificLuExtensionSize, описанного далее в этом разделе.

Хотя SCSIPort повторно инициализирует расширение устройства при остановке адаптера и таким образом последующие вызовы HwScsiFindAdapter получают расширение устройства с отсчитываемой от нуля, Storport не следует этой модели. Скорее, Storport сбрасывает расширение устройства до нуля только при первом выделении, поэтому только первый вызов HwStorFindAdapter для данного адаптера получает расширение устройства с отсчитываемой от нуля. Последующие вызовы HwStorFindAdapter и другие функции минипорта получают расширение устройства, как последнее изменение минипортом. Это позволяет минипорт-драйверу поддерживать знания о состоянии адаптера между подключаемым модулем и перезапуском (PnP), что позволяет мини-драйверу оптимизировать процедуру инициализации.

SpecificLuExtensionSize

Указывает размер в байтах, необходимый драйверу мини-порта для его хранилища по логическому блоку, если таковой имеется. Минипорт-драйвер может использовать расширения LU в качестве хранилища для сведений о периферийных устройствах на шине, определяемых драйвером. Драйвер Storport инициализирует каждое расширение LU, выделяемое с нулями. Оставьте этот член равным нулю, если драйвер минипорта не поддерживает сведения о lu-LU, для которых требуется хранилище. Это значение основано на предположении, что HBA может получать 32-разрядные адреса независимо от того, что контроллер может фактически поддерживать. Если требуется дополнительное пространство в расширениях LUN или SRB для обработки 64-разрядных адресов, необходимо внести соответствующие корректировки в это значение, прежде чем использовать его с подпрограммами, такими как StorPortGetUncachedExtension.

SrbExtensionSize

Указывает размер в байтах, необходимый мини-драйверу для своего хранилища на запрос, если таковой имеется. Минипорт-драйвер может использовать расширения SRB в качестве хранилища для определяемых драйвером, определенных запросом сведений, таких как данные, необходимые для обработки конкретного запроса. Драйвер Storport не инициализирует расширения SRB, но задает указатель на это хранилище в каждом SRB, который отправляется в мини-драйвер. Расширение SRB можно безопасно получить с помощью оборудования HBA. Так как минипорт-драйверы, работающие с драйвером Storport, должны поддерживать списки точечной и сборной, а списки точечной и сборной для каждого SRB обычно выделяются в расширении SRB, этот элемент редко равен нулю. Оставьте этот член равным нулю, если драйвер минипорта не поддерживает сведения о SRB, для которых требуется хранилище.

Это значение основано на предположении, что HBA может получать 32-разрядные адреса независимо от того, что контроллер может фактически поддерживать. Если требуется дополнительное пространство в расширениях LUN или SRB для обработки 64-разрядных адресов, необходимо внести соответствующие корректировки в это значение, прежде чем использовать его с подпрограммами, такими как StorPortGetUncachedExtension.

NumberOfAccessRanges

Указывает, сколько диапазонов доступа использует адаптер. Каждый из них — это диапазон адресов памяти или портов ввода-вывода.

Reserved

Зарезервировано для использования системой и недоступно для использования мини-драйверами.

MapBuffers

Указывает, сопоставляет ли драйвер Storport адреса буфера данных SRB с системными виртуальными адресами. Элемент MapBuffers может иметь одно из следующих значений.

Ценность Значение
STOR_MAP_NO_BUFFERS (0) Не сопоставляйте никакие SRB, кроме SRB_FUNCTION_IO_CONTROL и SRB_FUNCTION_WMI.
STOR_MAP_ALL_BUFFERS (1) Устаревший. Это значение имеет тот же эффект, что и STOR_MAP_NON_READ_WRITE_BUFFERS.
STOR_MAP_NON_READ_WRITE_BUFFERS (2) Сопоставляйте буфер для всех операций ввода-вывода, за исключением запросов на чтение или запись.
STOR_MAP_ALL_BUFFERS_INCLUDING_READ_WRITE (3) Сопоставляйте буфер для всех операций ввода-вывода, включая запросы на чтение и запись. Это значение допустимо начиная с Windows 8.

NeedPhysicalAddresses

Необходимо задать значение TRUE. Значение TRUE указывает, что драйвер минипорта должен переводить определенные типы адресов на физические адреса. Минипорт-драйверы, работающие с драйвером Storport, должны поддерживать DMA главного автобуса, поэтому они всегда должны выполнять перевод адресов.

TaggedQueuing

Необходимо задать значение TRUE. Значение TRUE указывает, что драйвер минипорта поддерживает очередь с тегами SCSI. Все драйверы минипорта, работающие с драйвером Storport, должны поддерживать пометку очереди.

AutoRequestSense

Должен быть TRUE. Значение TRUE указывает, что HBA может выполнять операцию", не требуя явного запроса для этого. Все драйверы минипорта, работающие с драйвером Storport, должны поддерживать функцию автозапуска SCSI.

MultipleRequestPerLu

Необходимо задать значение TRUE. Значение TRUE указывает, что драйвер мини-порта может очереди нескольких запросов на логическую единицу. Минипорт-драйверы, работающие с драйвером Storport, должны поддерживать несколько запросов на логическую единицу.

ReceiveEvent

Драйвер Storport игнорирует этот элемент.

VendorIdLength

Драйвер Storport игнорирует этот элемент, так как драйверы минипорта, работающие с драйвером Storport, должны поддерживать PnP.

VendorId

Драйвер Storport игнорирует этот элемент, так как драйверы минипорта, работающие с драйвером Storport, должны поддерживать PnP.

ReservedUshort

PortVersionFlags

Флаги, указывающие поддерживаемые функции.

DeviceIdLength

Драйвер Storport игнорирует этот элемент, так как драйверы минипорта, работающие с драйвером Storport, должны поддерживать PnP.

DeviceId

Драйвер Storport игнорирует этот элемент, так как драйверы минипорта, работающие с драйвером Storport, должны поддерживать PnP.

HwAdapterControl

Указатель на HwStorAdapterControl. Это необходимая подпрограмма, так как для минипорт-драйверов, работающих с драйвером Storport, требуется поддержка PnP.

HwBuildIo

Указатель на необязательную процедуру HwStorBuildIo, которую драйвер портов вызывает для выполнения несинхронизированной обработки перед вызовом HwStorStartIo драйвера минипорта. Этот обратный вызов зависит от физических мини-портов и должен иметь значение NULL виртуальными минипортами.

HwFreeAdapterResources

Указатель на драйвера виртуального минипорта HwStorFreeAdapterResources подпрограммой, которая является обязательной точкой входа для всех драйверов виртуального минипорта. Этот обратный вызов зависит от виртуальных мини-портов и имеет значение NULL для физических мини-портов.

Этот обратный вызов добавляется в Windows 8. Виртуальные мини-порты для предыдущих версий Windows должны использовать VIRTUAL_HW_INITIALIZATION_DATA вместо этой структуры.

HwProcessServiceRequest

Указатель на драйвера виртуального минипорта HwStorProcessServiceRequest подпрограммы. Этот обратный вызов зависит от виртуальных мини-портов и имеет значение NULL для физических мини-портов.

Этот обратный вызов добавляется в Windows 8. Виртуальные мини-порты для предыдущих версий Windows должны использовать VIRTUAL_HW_INITIALIZATION_DATA вместо этой структуры.

HwCompleteServiceIrp

Указатель на драйвера виртуального минипорта HwStorCompleteServiceIrp. Этот обратный вызов зависит от виртуальных мини-портов и имеет значение NULL для физических мини-портов.

Этот обратный вызов добавляется в Windows 8. Виртуальные мини-порты для предыдущих версий Windows должны использовать VIRTUAL_HW_INITIALIZATION_DATA вместо этой структуры.

HwInitializeTracing

Указатель на драйвера виртуального минипорта HwStorInitializeTracing. Этот обратный вызов зависит от виртуальных мини-портов и имеет значение NULL для физических мини-портов.

Этот обратный вызов добавляется в Windows 8. Виртуальные мини-порты для предыдущих версий Windows должны использовать VIRTUAL_HW_INITIALIZATION_DATA вместо этой структуры.

HwCleanupTracing

Указатель на HwStorCleanupTracing драйвера виртуального минипорта. Этот обратный вызов зависит от виртуальных мини-портов и имеет значение NULL для физических мини-портов.

Этот обратный вызов добавляется в Windows 8. Виртуальные мини-порты для предыдущих версий Windows должны использовать VIRTUAL_HW_INITIALIZATION_DATA вместо этой структуры.

HwTracingEnabled

Указатель на необязательный HwStorTracingEnabled подпрограммой, которую драйвер портов вызывает для уведомления минипорта о том, включена ли трассировка.

FeatureSupport

Флаги, указывающие функции, поддерживаемые минипортом. FeatureSupport задано сочетание следующих значений:

Ценность Значение
STOR_FEATURE_VIRTUAL_MINIPORT (0x00000001) Это виртуальный минипорт-драйвер.
STOR_FEATURE_ATA_PASS_THROUGH (0x00000002) Минипорт поддерживает передачу ATA.
STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES (0x00000004) Минипорт предоставляет полные параметры в своей STOR_DEVICE_CAPABILITIES_EX структуре.
STOR_FEATURE_DUMP_POINTERS (0x00000008) Минипорт поддерживает указатели дампа.
STOR_FEATURE_DEVICE_NAME_NO_SUFFIX (0x00000010) Минипорт-драйвер не хочет, чтобы суффикс "SCSI тип устройство" в составе понятного имени устройства.
STOR_FEATURE_DUMP_RESUME_CAPABLE (0x00000020) Возможность дампа мини-порта работает для возобновления работы с гибернацией.
STOR_FEATURE_DEVICE_DESCRIPTOR_FROM_ATA_INFO_VPD (0x00000040) Драйвер Storport инициализирует STORAGE_DEVICE_DESCRIPTOR на странице СВЕДЕНИЙ ATA, а не из данных ЗАПРОСА.
STOR_FEATURE_EXTRA_IO_INFORMATION (0x00000080) Минипорт-драйвер хочет SRBEX_DATA_IO_INFO в SRBEX, если он доступен.
STOR_FEATURE_ADAPTER_CONTROL_PRE_FINDADAPTER (0x00000100) Драйвер минипорта может безопасно обрабатывать вызов AdapterControl из Storport перед получением HwFindAdapter.
STOR_FEATURE_ADAPTER_NOT_REQUIRE_IO_PORT (0x00000200) Драйвер минипорта не требует ресурса порта ввода-вывода для своего адаптера.
STOR_FEATURE_DUMP_16_BYTE_ALIGNMENT (0x00000400) Минипорт-драйвер хочет, чтобы его HwDeviceExtension было 16 байтов, выровненных в режиме дампа.
STOR_FEATURE_SET_ADAPTER_INTERFACE_TYPE (0x00000800) Минипорт хочет, чтобы Storport установил тип интерфейса адаптера.
STOR_FEATURE_DUMP_INFO (0x00001000) Минипорт-драйвер поддерживает сведения о дампах.
STOR_FEATURE_DMA_ALLOCATION_NO_BOUNDARY (0x00002000) Минипорт-драйвер поддерживает выделение DMA физической памяти без границ.
STOR_FEATURE_SUPPORTS_NVME_ADAPTER (0x00004000) Минипорт-драйвер поддерживает адаптеры хранилища на основе NVMe.
STOR_FEATURE_REPORT_INTERNAL_DATA (0x00008000) Драйвер минипорта поддерживает отчеты о внутренних данных.
STOR_FEATURE_EARLY_DUMP (0x00010000) Минипорт-драйвер поддерживает раннее создание дампа аварийного сбоя.
STOR_FEATURE_NVME_ICE (0x00020000) Минипорт-драйвер поддерживает NVMe ICE.

SrbTypeFlags

Флаги, указывающие типы SRB, поддерживаемые минипортом. SrbTypeFlags имеет значение 0 или сочетание следующих значений:

Ценность Значение
SRB_TYPE_FLAG_SCSI_REQUEST_BLOCK (0x1) Минипорт использует стандартные SRB.
SRB_TYPE_FLAG_STORAGE_REQUEST_BLOCK (0x2) Минипорт поддерживает расширенные ССР.

AddressTypeFlags

Схемы адресов, поддерживаемые минипортом. В настоящее время поддерживается только одна схема адресов, а минипорт должен задать для этого элемента значение ADDRESS_TYPE_FLAG_BTL8.

Ценность Значение
ADDRESS_TYPE_FLAG_BTL8 (0x1) 8-разрядная адресация шины, целевого объекта и LUN (BTL).

Reserved1

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

HwUnitControl

Указатель на HwStorUnitControl. Драйвер портов вызывает эту подпрограмму с запросом элемента управления для устройства единицы хранения.

Замечания

Каждый драйвера минипорта Storport DriverEntry должен вызывать StorPortInitialize после того, как драйвер минипорта сначала обнулился, а затем задать члены HW_INITIALIZATION_DATA.

Требования

Требование Ценность
заголовка storport.h (include Storport.h)