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
指向以 null 结尾的 ASCII 字符串的指针。 如果提供此字符串,则包含注册表中的设备信息,例如基参数。
ConfigInfo
指向 PORT_CONFIGURATION_INFORMATION 结构的指针。 端口驱动程序使用任何已知的配置信息(例如微型端口驱动程序 DriverEntryVIRTUAL_HW_INITIALIZATION_DATA设置的值)初始化此结构。 VIRTUAL_HW_FIND_ADAPTER 必须使用任何提供的信息来确定它描述的虚拟 HBA 是否是微型端口驱动程序支持的信息。 如果是这样,VIRTUAL_HW_FIND_ADAPTER 初始化并配置 HBA 并填写任何缺失的配置信息。 如果可能,微型端口驱动程序应具有它支持的每种 HBA 的默认配置值,前提是作系统相关的端口驱动程序无法提供微型端口驱动程序 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。 可以根据需要设置其他字段。
端口驱动程序在PASSIVE_LEVEL调用 Storport 虚拟微型端口的 VIRTUAL_HW_FIND_ADAPTER。
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作系统编写驱动程序的要求。
例如,若要定义名为 myVirtualHwFindAdapter 的 VIRTUAL_HW_FIND_ADAPTER 回调例程,请使用 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) |