IRP_MN_FILTER_RESOURCE_REQUIREMENTS

El administrador de PnP envía este IRP a una pila de dispositivos para que el controlador de función pueda ajustar los recursos necesarios para el dispositivo, si procede.

El controlador de función normalmente controla este IRP.

El controlador de autobús primario (y los controladores de filtro de autobús) no debe controlar esta solicitud para un PDO secundario; en su lugar, este controlador debe notificar los requisitos de recursos en respuesta a una solicitud de IRP_MN_QUERY_RESOURCE_REQUIREMENTS .

Los controladores de filtro superior e inferior no controlan este IRP.

Value

0x0D

Código principal

IRP_MJ_PNP

Cuándo se envió

El administrador de PnP envía este IRP cuando se prepara para asignar recursos a un dispositivo.

El administrador de PnP envía este IRP a IRQL PASSIVE_LEVEL en el contexto de un subproceso arbitrario.

Parámetros de entrada

Irp-> IoStatus.Information apunta a un IO_RESOURCE_REQUIREMENTS_LIST que contiene los requisitos de recursos de hardware para el dispositivo. El puntero es NULL si el dispositivo no consume ningún recurso de hardware.

Parameters.FilterResourceRequirements.IoResourceRequirementList también apunta a un IO_RESOURCE_REQUIREMENTS_LIST, pero el controlador de función debe usar la lista en el bloque IoStatus .

Parámetros de salida

Se devuelve en el bloque de estado de E/S.

Bloque de estado de entrada/salida

Si un controlador de función controla este IRP, lo controla en la forma de hacer una copia de seguridad de la pila del IRP. Si el controlador de función controla el IRP correctamente, establece Irp-IoStatus.Status> en STATUS_SUCCESS y establece Irp-IoStatus.Information> en un puntero a un IO_RESOURCE_REQUIREMENTS_LIST que contiene los requisitos de recursos filtrados. Consulte la sección "Operación" siguiente para obtener más información sobre cómo establecer la lista de recursos filtrados. Si un controlador de función encuentra un error al controlar este IRP, establece el error en Irp-IoStatus.Status>. Si un controlador de función no controla este IRP, usa IoSkipCurrentIrpStackLocation para pasar el IRP a la pila sin cambios.

Los controladores de filtro superior e inferior no controlan este IRP. Este controlador llama a IoSkipCurrentIrpStackLocation, pasa el IRP al siguiente controlador, no debe modificar Irp-IoStatus> y no debe completar el IRP.

El controlador de autobús primario no controla este IRP. Deja Irp-IoStatus> tal cual y completa el IRP.

Operación

El administrador de PnP envía una solicitud de IRP_MN_QUERY_RESOURCE_REQUIREMENTS al controlador de bus primario para el dispositivo, antes de que el controlador de función haya conectado su objeto de dispositivo a la pila de dispositivos. Para proporcionar al controlador de función la oportunidad de modificar los requisitos de recursos del dispositivo, si procede, el administrador de PnP envía más adelante una solicitud de IRP_MN_FILTER_RESOURCE_REQUIREMENTS a la pila completa del dispositivo. El administrador de PnP envía este IRP antes de asignar recursos de hardware al dispositivo durante la configuración inicial del dispositivo. El administrador de PnP también puede enviar este IRP durante el reequilibrio de recursos.

Cuando el administrador de PnP envía este IRP, proporciona la pila de controladores con una lista de requisitos de recursos, que los controladores pueden modificar y devolver. El administrador de PnP proporciona uno de los siguientes tipos de lista de requisitos de recursos (enumerados en orden de prioridad):

  • Configuración forzada (modificada de una lista de recursos a una lista de requisitos de recursos)

  • Invalidación de la configuración

  • Configuración básica

  • Configuración de arranque (modificada de una lista de recursos a una lista de requisitos de recursos)

Si un controlador de función controla este IRP, debe establecer una rutina de finalización y controlar el IRP en su camino de copia de seguridad de la pila del dispositivo. Consulte Plug and Play para obtener información sobre cómo controlar un IRP de PnP en su camino de copia de seguridad de la pila del dispositivo.

Si el controlador de función no cambia el tamaño de la lista actual a la que apunta Irp-IoStatus.Information>, el controlador puede modificar la lista en su lugar. Si el controlador necesita cambiar el tamaño de la lista de requisitos, el controlador debe asignar una nueva lista de IO_RESOURCE_REQUIREMENTS_LIST de la memoria paginada y liberar la lista anterior. El administrador de PnP libera la estructura devuelta cuando ya no es necesaria.

Un controlador de función debe conservar el orden de los recursos de la lista a la que apunta Irp-IoStatus.Information> y no debe modificar las etiquetas de recursos que no controla. El controlador debe tener cuidado para ajustar la lista de requisitos de una manera que admita el bus primario del dispositivo. Si un controlador de función agrega un nuevo recurso a la lista de requisitos y ese recurso se asigna al dispositivo, el controlador de función debe filtrar ese recurso fuera del IRP_MN_START_DEVICE antes de pasar el IRP inicial al controlador de autobús.

Si el controlador de función del dispositivo no controla este IRP, el administrador de PnP usa los requisitos de recursos especificados por el controlador de bus primario en respuesta a la solicitud de IRP_MN_QUERY_RESOURCE_REQUIREMENTS .

Un controlador de función debe estar preparado para controlar este IRP para un dispositivo en cualquier momento después de llamar a la rutina AddDevice del controlador para el dispositivo.

Consulte Plug and Play para conocer las reglas generales para controlar Plug and Play IRP menores.

Envío de este IRP

Reservado para uso del sistema. Los controladores no deben enviar este IRP.

Requisitos

Encabezado

Wdm.h (incluya Wdm.h, Ntddk.h o Ntifs.h)

Consulte también

ExAllocatePoolWithTag

ExFreePool

IO_RESOURCE_REQUIREMENTS_LIST

IRP_MN_START_DEVICE