共用方式為


Storport 所提供的功能

Storport 驅動程式提供下列功能:

  • 尋址

    Microsoft Windows 支援包含不同類型的 I/O 總線和/或相同類型的數個 I/O 總線的系統。 需要一個統一的尋址配置來處理這種多樣性。

    PCI 裝置可以同時有 I/O 埠和記憶體緩存器資源。 邏輯位址有助於讓埠驅動程式瞭解此差異。

    某些系統包含連線到多個總線的 HBA 。這類 HBA 可能需要數組位址轉譯。

    跨 CISC 型和 RISC 型機器的可移植性需要邏輯位址。

  • 重試和錯誤處理

    • 當裝置太忙碌而無法處理它們時,記憶體類別驅動程式不需要實作演算法來重試 IRP。 Storport 驅動程式會實作這項功能。

    • 類別驅動程式會設定要求的逾時值,而 Storport 負責強制執行它。 不過,Storport 驅動程式可以彈性地強制執行類別驅動程式的逾時值,並將公交車的狀態納入考慮。 例如,如果 Storport 所管理的光纖通道連結中斷 20 秒,Storport 可能會在中斷期間暫停逾時計數器,這樣,有逾時設定 10 秒的請求將不會在逾時前失敗,直到連線恢復並持續運行 10 秒後才會失敗。 Storport 會增加指派給要求的逾時值,以回應 I/O 流量的增加,因為使用較重的 I/O 流量,裝置將需要更多時間才能完成要求。

    • Storport 會處理目標設備和控制器繁忙錯誤,以及傳輸錯誤情況(換句話說,與总线上的數據实际传输问题相關的錯誤)。 例如:

      • 總線同位錯誤
      • 選擇超時
  • 設定、佇列和電源狀態管理

    • 為類別驅動程式提供有關主機配接器限制的資訊:類別驅動程式有責任調整數據傳輸的大小,以符合主機匯流排介面卡的限制。 不過,Storport 會提供類別驅動程式完成這項工作所需的資訊。 Storport 在適配卡描述元(STORAGE_ADAPTER_DESCRIPTOR)中提供此資訊,以回應 IOCTL 要求(IOCTL_STORAGE_QUERY_PROPERTY)。 類別驅動程式負責根據此描述元中報告的資訊,將要求分成適當大小的區塊。

    • 將總線相對地址轉譯為邏輯位址:查詢時,配接器會為I/O埠、命令緩存器和控制狀態緩存器提供總線相對位址。 不過,迷你埠驅動程序無法使用總線相對位址與其主機總線適配卡 (HBA) 通訊。 Storport 會將總線相對地址轉譯為邏輯位址,讓迷你埠驅動程式能夠以透明的方式存取總線位址。 有數個原因:

    • 確保裝置及其所有相關基礎裝置在啟動前都已開啟,並處於 D0 裝置電源狀態:當裝置尚未準備好開啟時,Storport 會將 D0 要求排入佇列,直到該裝置準備就緒為止。

    • 佇列來自類別驅動程式的異步要求,並以異步方式轉送至目標裝置:類別驅動程式不需要等待要求完成,再傳送下一個要求。 Storport 負責將這些請求排入佇列,以避免超出基礎硬體的處理能力。

    • 支持內部 I/O 要求佇列的內部和外部管理:大部分的佇列管理作業都是由 Storport 本身起始。 例如,Storport 會在發生錯誤時凍結其佇列,並將錯誤狀況報告給類別驅動程式,讓類別驅動程式可以在處理進一步的要求之前回應。 不過,Storport 也會回應類別驅動程式或其他高層驅動程式的要求,以鎖定、解鎖、凍結或解凍其內部要求佇列。 較高層級的驅動程式可以使用 SRB_FUNCTION_RELEASE_QUEUE 要求強制 Storport 解凍其內部佇列。 如需「凍結」、「鎖定」或「解除鎖定」佇列的意義說明,請參閱 Storport 佇列管理

    • 將裝置所報告的錯誤轉譯為 SCSI-3 感知數據格式,以供類別驅動程式處理。

Storport 會透過 Storport 連結庫例程,為迷你埠驅動程式提供服務。 迷你埠驅動程式寫入器可以呼叫這些例程,而不是將它們所提供的功能編碼成單一整合型埠驅動程式。 使用這些例程所提供的一些最重要的服務如下:

  • Storport 迷你埠驅動程式可以將許多 OS 相依初始化作業委派給 Storport 的 StorPortInitialize 連結庫例程。 例如,Storport 驅動程式會處理與 PnP 和 DMA 對應相關的詳細數據。 這樣可減少 Storport 迷你埠驅動程式需要執行的工作量。 如需 Storport 迷你埠驅動程式初始化職責的說明,請參閱 使用 Storport 進行硬體初始化

  • 非 PnP 裝置的 Storport 迷你埠驅動程式可避免尋找適配卡,並將其資源回報給 PnP 管理員的工作。 這是在 StorPortInitialize 中完成的。

  • Storport 迷你埠驅動程式不會初始化驅動程序物件中的分派進入點。 當迷你埠驅動程式呼叫 StorPortInitialize 時,Storport 驅動程式會代表迷你埠驅動程序執行這項作業。

  • Storport 迷你埠驅動程式不會使用 HalTranslateBusAddress 將總線相對地址轉換為邏輯位址。 Storport 迷你埠驅動程式會藉由呼叫 StorPortGetDeviceBase 來執行此動作。

如需 Storport 提供給 Storport 迷你埠驅動程式的連結庫例程完整清單,請參閱 Storport 驅動程序支援例程