IRP_MN_FILTER_RESOURCE_REQUIREMENTS

PnP 管理員會將此 IRP 傳送至裝置堆疊,讓函式驅動程式可以視需要調整裝置所需的資源。

函式驅動程式通常會處理此 IRP。

父匯流排驅動程式 (和匯流排篩選驅動程式) 不應該處理子 PDO 的這個要求;相反地,這類驅動程式應該回報資源需求,以回應 IRP_MN_QUERY_RESOURCE_REQUIREMENTS 要求。

上層和下層篩選驅動程式不會處理此 IRP。

0x0D

主要程式碼

IRP_MJ_PNP

傳送時

當 PnP 管理員準備將資源配置 () 給裝置時,PnP 管理員會傳送此 IRP。

PnP 管理員會在 IRQL PASSIVE_LEVEL任意執行緒的內容中傳送此 IRP。

輸入參數

Irp- >IoStatus.Information 指向包含裝置硬體資源需求的 IO_RESOURCE_REQUIREMENTS_LIST 。 如果裝置不使用硬體資源,則指標為 Null

Parameters.FilterResourceRequirements.IoResourceRequirementList 也指向 IO_RESOURCE_REQUIREMENTS_LIST,但函式驅動程式應該使用 IoStatus 區塊中的清單。

輸出參數

在 I/O 狀態欄塊中傳回。

I/O 狀態欄塊

如果函式驅動程式處理此 IRP,它會在 IRP 的備份堆疊時加以處理。 如果函式驅動程式成功處理 IRP,它會將 Irp-IoStatus.Status > 設定為 STATUS_SUCCESS,並將 Irp-IoStatus.Information > 設定為包含篩選資源需求的 IO_RESOURCE_REQUIREMENTS_LIST 指標。 如需設定已篩選資源清單的詳細資訊,請參閱下面的一節。 如果函式驅動程式在處理此 IRP 時遇到錯誤,它會在 Irp-IoStatus.Status >中設定錯誤。 如果函式驅動程式未處理此 IRP,它會使用 IoSkipCurrentIrpStackLocation 將 IRP 傳遞至堆疊未變更。

上層和下層篩選驅動程式不會處理此 IRP。 這類驅動程式會呼叫 IoSkipCurrentIrpStackLocation、將 IRP 向下傳遞至下一個驅動程式、不得修改 Irp-IoStatus >,且不得完成 IRP。

父匯流排驅動程式不會處理此 IRP。 它會讓 Irp-IoStatus > 保持原樣,並完成 IRP。

作業

PnP 管理員會將 IRP_MN_QUERY_RESOURCE_REQUIREMENTS 要求傳送至裝置的父匯流排驅動程式,然後函式驅動程式才會將其裝置物件連結至裝置堆疊。 為了讓函式驅動程式有機會適當地修改裝置的資源需求,PnP 管理員稍後會將 IRP_MN_FILTER_RESOURCE_REQUIREMENTS 要求傳送至完整的裝置堆疊。 PnP 管理員會在初始裝置設定期間將硬體資源配置給裝置之前,先傳送此 IRP。 PnP 管理員也可能在資源重新平衡期間傳送此 IRP。

當 PnP 管理員傳送此 IRP 時,它會提供驅動程式堆疊的資源需求清單,讓驅動程式可以修改並傳回。 PnP 管理員提供下列其中一種資源需求清單, (依優先順序列出) :

  • 強制設定 (從資源清單修改為資源需求清單)

  • 覆寫組態

  • 基本設定

  • 從資源清單修改為資源需求清單 (開機設定)

如果函式驅動程式處理此 IRP,它必須設定完成常式,並在備份裝置堆疊時處理 IRP。 如需在備份裝置堆疊時處理 PnP IRP 的相關資訊,請參閱隨插即用

如果函式驅動程式未變更 Irp-IoStatus.Information >所指向的目前清單大小,驅動程式就可以就地修改清單。 如果驅動程式需要變更需求清單的大小,驅動程式必須從分頁記憶體配置新的 IO_RESOURCE_REQUIREMENTS_LIST 清單,並釋放先前的清單。 當不再需要時,PnP 管理員會釋放傳回的結構。

函式驅動程式必須保留 Irp-IoStatus.Information > 所指向之清單中的資源順序,而且不得改變其未處理的資源標籤。 驅動程式必須小心,才能以裝置的父匯流排支援的方式調整需求清單。 如果函式驅動程式將新的資源新增至需求清單,且該資源已指派給裝置,則函式驅動程式應該先將該資源篩選出 IRP_MN_START_DEVICE ,再將啟動 IRP 向下傳遞至匯流排驅動程式。

如果裝置的函式驅動程式未處理此 IRP,PnP 管理員會使用父匯流排驅動程式所指定的資源需求來回應 IRP_MN_QUERY_RESOURCE_REQUIREMENTS 要求。

在為裝置呼叫驅動程式的 AddDevice 常式之後,必須準備好隨時處理裝置的這個 IRP。

如需處理隨插即用次要 IRP的一般規則,請參閱隨插即用

傳送此 IRP

保留供系統使用。 驅動程式不得傳送此 IRP。

規格需求

標頭

Wdm.h (包括 Wdm.h、Ntddk.h 或 Ntifs.h)

另請參閱

ExAllocatePoolWithTag

ExFreePool

IO_RESOURCE_REQUIREMENTS_LIST

IRP_MN_START_DEVICE