IRP_MN_FILTER_RESOURCE_REQUIREMENTS

PnP 管理器将此 IRP 发送到设备堆栈,以便函数驱动程序可以根据需要调整设备所需的资源。

函数驱动程序通常处理此 IRP。

父总线驱动程序 (和总线筛选器驱动程序) 不应处理子 PDO 的此请求;相反,此类驱动程序应报告资源要求以响应 IRP_MN_QUERY_RESOURCE_REQUIREMENTS 请求。

上限和下筛选器驱动程序不处理此 IRP。

0x0D

主代码

IRP_MJ_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。

Operation

在函数驱动程序将其设备对象附加到设备堆栈之前,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 向下传递到总线驱动程序之前,从 IRP_MN_START_DEVICE 中筛选出该资源。

如果设备的函数驱动程序未处理此 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