共用方式為


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

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

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

VMiniport 介面

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

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

  • HW_INITIALIZATION_DATA,這是由 VMiniport 分配和初始化的結構,VMiniport 在 初始化期間將其傳遞至 Storport,。 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 來描述 I/O 要求(標準或擴充 SRB)。

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

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