функция обратного вызова 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) |