Поделиться через


IRP_MN_FILTER_RESOURCE_REQUIREMENTS

Диспетчер PnP отправляет этот IRP в стек устройств, чтобы драйвер функции при необходимости смог настроить ресурсы, необходимые устройству.

Драйвер функции обычно обрабатывает этот IRP.

Родительский драйвер шины (и драйверы фильтров шины) не должен обрабатывать этот запрос для дочернего PDO; Вместо этого такой драйвер должен сообщать о требованиях к ресурсам в ответ на запрос IRP_MN_QUERY_RESOURCE_REQUIREMENTS .

Драйверы верхнего и нижнего фильтров не обрабатывают этот IRP.

Значение

0x0D

Основной код

IRP_MJ_PNP

При отправке

Диспетчер PnP отправляет этот IRP при подготовке к выделению ресурсов устройству.

Диспетчер PnP отправляет этот IRP на PASSIVE_LEVEL IRQL в контексте произвольного потока.

Входные параметры

Irp-> IoStatus.Information указывает на IO_RESOURCE_REQUIREMENTS_LIST , содержащий требования к аппаратным ресурсам для устройства. Указатель имеет значение NULL , если устройство не использует аппаратные ресурсы.

Parameters.FilterResourceRequirements.IoResourceRequirementList также указывает на IO_RESOURCE_REQUIREMENTS_LIST, но драйвер функции должен использовать список в блоке IoStatus .

Выходные параметры

Возвращается в блоке состояния ввода-вывода.

Блок состояния ввода-вывода

Если драйвер функции обрабатывает этот 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 на пути к стеку устройств. Сведения об обработке IRP PnP на пути резервного копирования стека устройств см. в Plug and Play.

Если драйвер функции не изменяет размер текущего списка, на который указывает Irp-IoStatus.Information>, драйвер может изменить список на месте. Если драйверу необходимо изменить размер списка требований, драйвер должен выделить новый список IO_RESOURCE_REQUIREMENTS_LIST из постраничной памяти и освободить предыдущий список. Диспетчер PnP освобождает возвращаемую структуру, когда она больше не нужна.

Драйвер функции должен сохранять порядок ресурсов в списке, на который указывает Irp-IoStatus.Information>, и не должен изменять теги ресурсов, которые он не обрабатывает. Водитель должен позаботиться о том, чтобы настроить список требований таким образом, который поддерживает родительская шина устройства. Если драйвер функции добавляет новый ресурс в список требований и этот ресурс назначается устройству, драйвер функции должен отфильтровать этот ресурс из IRP_MN_START_DEVICE , прежде чем передавать начальный IRP драйверу шины.

Если драйвер функции для устройства не обрабатывает этот IRP, диспетчер PnP использует требования к ресурсам, указанные драйвером родительской шины в ответ на запрос IRP_MN_QUERY_RESOURCE_REQUIREMENTS .

Драйвер-функция должен быть подготовлен к обработке этого IRP для устройства в любое время после вызова процедуры AddDevice драйвера для устройства.

Общие правила обработки Plug and Play незначительных irp см. в Plug and Play.

Отправка этого IRP

Зарезервировано для системного использования. Драйверы не должны отправлять этот IRP.

Требования

Заголовок

Wdm.h (включая Wdm.h, Ntddk.h или Ntifs.h)

См. также раздел

ExAllocatePoolWithTag

ExFreePool

IO_RESOURCE_REQUIREMENTS_LIST

IRP_MN_START_DEVICE