实现 Storport 虚拟微型端口驱动程序

本页提供 Storport 虚拟微型端口驱动程序 (VMiniport) 的高级实现信息。 VMiniport 接口在 storport.h 中定义。

设计注意事项对各种 VMiniport 都是独一无二的,因此此处不包含实现细节。

VMiniport 接口

本部分列出了 VMiniport 实现/使用的更突出的函数、回调和结构。 某些函数和回调是必需的;可选回调对于 VMiniport 的设计是唯一的。

  • DriverEntry,这是操作系统在加载 VMiniport 后调用的第一个例程。 此例程是必需的。

  • HW_INITIALIZATION_DATA,它是 VMiniport 在 初始化期间传递给 Storport 的 Vminiport 分配和初始化结构。 VMiniport 在此结构中提供指向其回调函数的指针。

    需要以下回调例程:

    以下回调例程是可选的,但 VMiniport 可能必须根据其独特的体系结构实现其中一些例程:

    • HwInitializeTracing

    • HwCleanupTracing。 当 HwInitializeTracing 指向回调例程时,需要此例程;否则,此例程是可选的,并且对于 VMiniport 是唯一的。

    • HwProcessServiceRequest。 当 VMiniport 更新调用方 ((例如用户模式应用程序或内核模式驱动程序)) 或要求调用方代表 VMiniport 执行某些操作时,此例程将接收“反向回调”IRP。

    • HwCompleteServiceIrp当 HwProcessServiceRequest 指向回调例程时,需要此例程;否则,此例程是可选的,对于 VMiniport 是唯一的。删除虚拟适配器时调用 HwCompleteServiceIrp,以便 VMiniport 可以完成可能挂起的任何反向回调 IRP。

    VMiniport 还必须设置 HW_INITIALIZATION_DATA 结构的以下成员:

    • HwInitializationDataSize 设置为 sizeof (HW_INITIALIZATION_DATA) 。

    • AdapterInterfaceType 设置为 Internal,这向 Storport 指示这是虚拟适配器。

    • HwBuildIo 设置为 NULL。

    Vminiport 驱动程序根据需要设置其他字段。 未使用的字段必须设置为零。

  • PORT_CONFIGURATION_INFORMATION,它是由 Storport 分配的结构。 Storport 初始化一些 PORT_CONFIGURATION_INFORMATION 成员,然后将其传递到 VMiniport 的 HwFindAdapter 回调,VMiniport 在其中完成初始化。 由于此结构由 Storport 预先初始化, 因此 HWFindAdapter 不得将结构归零。 VMiniport 必须将 VirtualDevice 设置为 TRUE。

VMiniport 初始化

VMiniport 有三个阶段的初始化。

VMiniport I/O

Storport 调用 VMiniport 的 HwStartIo 回调来启动 I/O 请求。 在 Storport 中,I/O 请求分别使用 SCSI_REQUEST_BLOCKSTORAGE_REQUEST_BLOCK (标准或扩展 SRB 描述) 。

与物理微型端口驱动程序不同,Storport 在调用 HwStartIo 之前不会在 Vminiport 中调用 HwBuildIo

在调用 HwStartIo 之前,不会保留任何锁。 通过虚拟微型端口接口公开的每个逻辑单元的默认队列深度为 250。