Driver-Managed IRP 佇列

除了檔案系統驅動程式之外,I/O 管理員會將裝置佇列物件關聯 (,以便將 IRP 排入佇列,) 驅動程式所建立的每個裝置物件。

大部分的設備磁碟機都會呼叫 I/O 管理員的支援常式,以使用相關聯的裝置佇列,每當目標裝置物件的裝置 I/O 要求出現速度比驅動程式可以處理完成的更快速時,保留 IRP。 透過這項技術,IRP 會排入驅動程式提供的 StartIo 常式。

為了達到良好的效能,大部分的中繼驅動程式只要將 IRP 傳遞至較低的驅動程式,因此中繼驅動程式幾乎永遠不會使用與其個別裝置物件相關聯的裝置佇列。

不過,您可以藉由明確設定一或多個裝置佇列、連結佇列或取消安全佇列,設計驅動程式來管理 IRP 的內部佇列。 如果驅動程式控制重迭 I/O 作業的裝置,這個方法特別有用。 針對這類裝置,使用單一佇列來管理相同目標裝置物件的兩個或多個 IRP 並行處理可能很困難。

建置內部佇列的最簡單方式是使用取消安全的 IRP 佇列架構。 您可以在驅動程式中實作您選擇的佇列機制。 然後,您可以使用 IoCsqInitialize 來註冊一組回呼常式,以處理 IRP 插入和刪除,以及鎖定和解除鎖定佇列。 取消安全 IRP 佇列架構提供 IoCsqInsertIrpIoCsqRemoveIrpIoCsqRemoveNextIrp 常式,這些常式會自動使用回呼常式安全地插入和移除驅動程式佇列中的 IRP。 系統也會使用您的回呼常式,安全地移除任何取消的 IRP。

您也可以選擇在一組異質實體裝置的裝置控制器驅動程式中設定 IRP 的補充佇列。 例如,SCSI 埠驅動程式會針對內部佇列使用裝置佇列物件。 此驅動程式都有 StartIo 常式,並將裝置佇列物件設定為補充佇列,除了與它所建立之裝置物件相關聯的裝置佇列之外,還代表 HBA。 SCSI 埠驅動程式會使用其補充裝置佇列來保存 HBA 控制 SCSI 匯流排上特定邏輯單元所系結的 IRP, (es) 。

系統軟碟控制卡驅動程式是沒有 StartIo 常式的驅動程式範例,並使用相互鎖定的佇列。 此驅動程式會設定兩次連結的相互連結的佇列,從中插入和移除驅動程式及其裝置專用線程插入和移除 IRP。

核心會定義裝置佇列物件類型。 主管支援元件提供在連結佇列中插入和移除 IRP 的常式。 適用于 Windows XP 和更新版本的 Windows 驅動程式可以使用 無取消的 IRP 佇列來處理 IRP 佇列。

下列各節說明如何使用裝置佇列、連結佇列和取消安全佇列:

設定和使用裝置佇列

管理裝置佇列

設定和使用連結佇列

使用Driver-Created執行緒管理連結佇列

取消安全 IRP 佇列