Storport 所提供的功能
Storport 驅動程式提供下列功能:
定址
Microsoft Windows 支援包含不同類型的 I/O 匯流排和/或相同類型的數個 I/O 匯流排的系統。 需要一個常見的定址配置,才能處理此種類。
PCI 裝置可以同時有 I/O 埠和記憶體暫存器資源。 邏輯位址有助於讓埠驅動程式透明地區分。
某些系統包含連線到多個匯流排的 HBA;這類 HBA 可能需要陣列位址轉譯。
需要邏輯位址,才能跨 CISC 型和 RISC 型機器進行移植性。
重試和錯誤處理
當裝置太忙碌而無法處理它們時,儲存體類別驅動程式不需要實作演算法來重試 IRP。 Storport 驅動程式會實作這項功能。
類別驅動程式會設定要求的逾時值,而 Storport 負責強制執行它。 不過,Storport 驅動程式可以彈性地強制執行類別驅動程式的逾時值,並將匯流排的狀態納入考慮。 例如,如果 Storport 所管理的光纖通道連結卸載 20 秒,Storport 可能會在關閉時間期間暫停逾時計數器,因此,例如,在連結備份後 10 秒後,具有逾時的要求將不會失敗。 Storport 會增加指派給要求的逾時值,以回應 I/O 流量增加,因為使用較重的 I/O 流量,裝置需要更多時間才能完成要求。
Storport 會處理目標和控制器忙碌錯誤,以及傳輸錯誤狀況 (,換句話說,與匯流排上實際傳輸資料相關的錯誤) 。 例如:
- 匯流排同位錯誤
- 選取逾時
設定、佇列和電源狀態管理
為類別驅動程式提供主機介面卡限制的相關資訊:類別驅動程式負責規範資料傳輸的大小,以符合主機匯流排介面卡的限制, (HBA) 。 不過,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 驅動程式支援常式。