IRP_MN_FILTER_RESOURCE_REQUIREMENTS
PnP 管理器将此 IRP 发送到设备堆栈,以便函数驱动程序可以根据需要调整设备所需的资源。
函数驱动程序通常处理此 IRP。
父总线驱动程序 (和总线筛选器驱动程序) 不应处理子 PDO 的此请求;相反,此类驱动程序应报告资源要求以响应 IRP_MN_QUERY_RESOURCE_REQUIREMENTS 请求。
上限和下筛选器驱动程序不处理此 IRP。
值
0x0D
主代码
发送时
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。
要求
标头 |
Wdm.h(包括 Wdm.h、Ntddk.h 或 Ntifs.h) |