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


функция обратного вызова VIRTUAL_HW_FIND_ADAPTER (storport.h)

Виртуальный минипорт Storport использует сведения о конфигурации, предоставленные подпрограмме VIRTUAL_HW_FIND_ADAPTER для дальнейшей инициализации.

Синтаксис

VIRTUAL_HW_FIND_ADAPTER VirtualHwFindAdapter;

ULONG VirtualHwFindAdapter(
  PVOID DeviceExtension,
  PVOID HwContext,
  PVOID BusInformation,
  PVOID LowerDevice,
  PCHAR ArgumentString,
  PPORT_CONFIGURATION_INFORMATION ConfigInfo,
  PBOOLEAN Again
)
{...}

Параметры

DeviceExtension

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

HwContext

Указатель на PDO в стеке устройств. HBA сам является FDO. PDO может принадлежать драйверу Pci.sys, если драйвер минипорта управляет физическим оборудованием. Но в случае виртуального драйвера минипорта PDO принадлежит менеджеру PnP.

BusInformation

Указатель на объект функционального устройства (FDO) мини-порта.

LowerDevice

Указатель на объект устройства, управляемый FDO мини-порта.

ArgumentString

Указатель на строку ASCII, завершаемую null. Эта строка, если она указана, содержит сведения об устройстве из реестра, например базовый параметр.

ConfigInfo

Указатель на структуру PORT_CONFIGURATION_INFORMATION . Драйвер порта инициализирует эту структуру с помощью всех известных сведений о конфигурации, таких как значения, заданные драйвером miniport DriverEntry в VIRTUAL_HW_INITIALIZATION_DATA. VIRTUAL_HW_FIND_ADAPTER должны использовать любые предоставленные сведения, чтобы определить, поддерживает ли драйвер мини-порта описываемый виртуальный адаптер HBA. В этом случае VIRTUAL_HW_FIND_ADAPTER инициализирует и настраивает этот адаптер и заполняет отсутствующие сведения о конфигурации. Если возможно, драйвер мини-порта должен иметь значения конфигурации по умолчанию для каждого типа адаптера безопасности, который он поддерживает, в случае, если драйвер порта, зависящий от операционной системы, не может предоставить дополнительные сведения о конфигурации, которые не были предоставлены подпрограммой DriverEntry драйвера мини-порта.

Again

Не используется.

Возвращаемое значение

VIRTUAL_HW_FIND_ADAPTER должно возвращать одно из следующих значений состояния:

Код возврата Описание
SP_RETURN_FOUND Обнаружен поддерживаемый адаптер HBA, и сведения о конфигурации, относящиеся к HBA, были успешно определены и заданы в структуре PORT_CONFIGURATION_INFORMATION .
SP_RETURN_ERROR Был найден адаптер HBA, но при получении сведений о конфигурации произошла ошибка. По возможности такая ошибка должна быть зарегистрирована с помощью ScsiPortLogError.
SP_RETURN_BAD_CONFIG Предоставленные сведения о конфигурации были недопустимыми для адаптера.
SP_RETURN_NOT_FOUND Для предоставленных сведений о конфигурации не найден поддерживаемый адаптер HBA.

Комментарии

Поле VirtualDevice в структуре сведений о конфигурации должно иметь значение TRUE. При необходимости можно задать другие поля.

Драйвер порта вызывает VIRTUAL_HW_FIND_ADAPTER виртуального минипорта Storport в PASSIVE_LEVEL.

Имя VirtualHwStorFindAdapter — это замещающий текст для фактического имени подпрограммы. Фактический прототип этой подпрограммы определен в Srb.h следующим образом:

typedef
ULONG
VIRTUAL_HW_FIND_ADAPTER (
  _In_ PVOID  DeviceExtension,
  _In_ PVOID  HwContext,
  _In_ PVOID  BusInformation,
  _In_ PVOID  LowerDevice,
  _In_ PCHAR  ArgumentString,
  _Inout_ PPORT_CONFIGURATION_INFORMATION  ConfigInfo,
  _Out_ PBOOLEAN Again
  );

Примеры

Чтобы определить VIRTUAL_HW_FIND_ADAPTER функцию обратного вызова, необходимо сначала предоставить объявление функции, определяющее тип определяемой функции обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить VIRTUAL_HW_FIND_ADAPTER подпрограмму обратного вызова с именем MyVirtualHwFindAdapter, используйте тип VIRTUAL_HW_FIND_ADAPTER , как показано в этом примере кода:

VIRTUAL_HW_FIND_ADAPTER MyVirtualHwFindAdapter;

Затем реализуйте процедуру обратного вызова следующим образом:

_Use_decl_annotations_
ULONG
MyVirtualHwFindAdapter (
  _In_ PVOID  DeviceExtension,
  _In_ PVOID  HwContext,
  _In_ PVOID  BusInformation,
  _In_ PVOID  LowerDevice,
  _In_ PCHAR  ArgumentString,
  _Inout_ PPORT_CONFIGURATION_INFORMATION  ConfigInfo,
  _Out_ PBOOLEAN Again
  );
  {
      ...
  }

Тип функции VIRTUAL_HW_FIND_ADAPTER определен в файле заголовка Storport.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, которые применяются к типу функции VIRTUAL_HW_FIND_ADAPTER в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе Объявление функций с помощью типов ролей функций для драйверов Storport. Сведения о Use_decl_annotations см. в статье О поведении функции.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть storport.h (включая Storport.h)

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

HwStorFindAdapter

PORT_CONFIGURATION_INFORMATION

ScsiPortLogError

VIRTUAL_HW_INITIALIZATION_DATA