具有可重複使用 IRP 的 Packet-Driven I/O
I/O 管理員、隨插即用管理員和電源管理員會使用I/O 要求封包 (IRP) 與核心模式驅動程式通訊,並允許驅動程式彼此通訊。
I/O 管理員會執行下列步驟:
接受通常源自使用者模式應用程式的 I/O 要求。
建立 IRP 來代表 I/O 要求。
將 IRP 路由傳送至適當的驅動程式。
追蹤 IRP 直到完成為止。
將狀態傳回給每個 I/O 作業的原始要求者。
IRP 可能會路由傳送至多個驅動程式。 例如,在磁片上開啟檔案的要求可能會先移至檔案系統驅動程式、透過中繼鏡像驅動程式,最後移至磁片驅動程式,也可能是移至 PnP 硬體匯流排驅動程式。 這組驅動程式稱為 驅動程式堆疊。
因此,每個 IRP 都有 固定元件,以及每個控制裝置的驅動程式特定 I/O 堆疊位置 :
在固定部分 (或 標頭) 中,I/O 管理員會維護原始要求的相關資訊,例如呼叫端的執行緒識別碼和參數、檔案開啟所在裝置物件的位址等等。 固定元件也包含 I/O 狀態欄塊,其中驅動程式會設定所要求 I/O 作業狀態的相關資訊。
在最高層級驅動程式的 I/O 堆疊位置中,I/O 管理員、隨插即用管理員或電源管理員會設定驅動程式特定的參數,例如所要求作業的函式程式碼,以及對應驅動程式用來判斷其應該執行的動作。 接著,每個驅動程式都會在驅動程式堆疊中設定下一個較低驅動程式的 I/O 堆疊位置。
當每個驅動程式處理 IRP 時,它可以存取 IRP 中的 I/O 堆疊位置,藉此在驅動程式作業的每個階段重複使用 IRP。 此外,較高層級的驅動程式可以建立 (或重複使用) IRP,以將要求向下傳送至較低層級的驅動程式。
如需 IRP 的詳細討論,請參閱 處理 IRP。