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。