I/O 要求封包
大部分傳送至設備驅動器的要求會封裝在 I/O 要求封包中, (IRP) 。 操作系統元件或驅動程式會藉由呼叫 IoCallDriver將IRP傳送至驅動程式,其中包含兩個參數: DEVICE_OBJECT 指標和 IRP的指標。 DEVICE_OBJECT具有相關聯DRIVER_OBJECT的指標。 當元件呼叫 IoCallDriver時,假設元件 會將IRP傳送至裝置物件 ,或 將IRP傳送至與裝置對象相關聯的驅動程式。 有時候我們會使用片語 傳遞 IRP 或 轉送 IRP, 而不是 傳送 IRP。
IRP 通常是由堆疊中排列的數個驅動程式所處理。 堆疊中的每個驅動程式都會與裝置對象相關聯。 如需詳細資訊,請參閱 裝置節點和裝置堆疊。 當裝置堆疊處理 IRP 時,通常會先將 IRP 傳送到裝置堆疊中的最上層裝置物件。 例如,如果 IRP 是由此圖表中顯示的裝置堆疊所處理,則會先將 IRP 傳送至篩選裝置物件, (Filter DO) 裝置堆疊頂端。
將 IRP 向下傳遞至裝置堆疊
假設 I/O 管理員會將 IRP 傳送至圖表中的篩選 DO。 與 Filter DO AfterThought.sys 相關聯的驅動程式會處理 IRP,然後將它傳遞給功能裝置物件, (FDO) ,這是裝置堆疊中的下一個較低裝置物件。 當驅動程式將 IRP 傳遞至裝置堆疊中的下一個較低裝置物件時,我們假設驅動程式 會將 IRP 向下傳遞至裝置堆疊。
某些 IRP 會一路向下傳遞至實體裝置堆疊, (PDO) 。 其他 IRP 永遠不會到達 PDO,因為它們是由 PDO 上方的其中一個驅動程式完成。
IRP 是獨立式
IRP 結構是獨立的,因為它會保存驅動程序處理 I/O 要求所需的所有資訊。 IRP 結構的某些部分會保存堆疊中所有參與驅動程式通用的資訊。 IRP 的其他部分會保存堆疊中特定驅動程式專屬的資訊。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應