實作 Storport 虛擬迷你埠驅動程式

此頁面提供 Storport 虛擬迷你埠驅動程式 (VMiniport) 的高階實作資訊。 VMiniport 介面定義於 storport.h 中。

設計考慮對各種 VMiniports 而言是唯一的,因此此處不包含實作細節。

VMiniport 介面

本節列出 VMiniport 實作/使用的更醒目函式、回呼和結構。 需要某些函式和回呼;選擇性回呼對 VMiniport 的設計而言是唯一的。

  • DriverEntry,這是操作系統在載入 VMiniport 之後呼叫的第一個例程。 需要此例程。

  • HW_INITIALIZATION_DATA,這是 VMiniport 在 初始化期間傳遞至 Storport 的 Vminiport 配置和初始化結構。 VMiniport 會在此結構中提供其回呼函式的指標。

    需要下列回呼例程:

    下列回呼例程是選擇性的,但 VMiniport 可能必須根據其唯一架構來實作其中一些例程:

    • HwInitializeTracing

    • HwCleanupTracing。 當 HwInitializeTracing 指向回呼例程時,需要此例程;否則,此例程是選擇性的,而且對 VMiniport 而言是唯一的。

    • HwProcessServiceRequest。 此例程會收到「反向回呼」IRP,當 VMiniport 更新呼叫端 (,例如使用者模式應用程式或核心模式驅動程式) ,或要求呼叫端代表 VMiniport 執行某些動作時完成。

    • 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 中,會分別使用 SCSI_REQUEST_BLOCKSTORAGE_REQUEST_BLOCK (標準或擴充 S) RB 來描述 I/O 要求。

不同於實體迷你埠驅動程式,Storport 在呼叫 HwStartIo 之前,不會在 Vminiport 中呼叫 HwBuildIo

呼叫 HwStartIo 之前,不會保留任何鎖定。 透過虛擬迷你埠介面公開的每個邏輯單元的預設佇列深度為 250。