Compartilhar via


IRP_MN_FILTER_RESOURCE_REQUIREMENTS

O gerenciador PnP envia esse IRP para uma pilha de dispositivos para que o driver de função possa ajustar os recursos exigidos pelo dispositivo, se apropriado.

O driver de função normalmente manipula esse IRP.

O motorista do ônibus pai (e os drivers de filtro de ônibus) não deve lidar com essa solicitação para um PDO filho; Em vez disso, esse driver deve relatar os requisitos de recursos em resposta a uma solicitação de IRP_MN_QUERY_RESOURCE_REQUIREMENTS .

Os drivers de filtro superior e inferior não lidam com esse IRP.

Valor

0x0D

Código principal

IRP_MJ_PNP

Quando enviado

O gerenciador PnP envia esse IRP quando está se preparando para alocar recursos a um dispositivo.

O gerenciador PnP envia esse IRP em PASSIVE_LEVEL IRQL no contexto de um thread arbitrário.

Parâmetros de Entrada

Irp-> IoStatus.Information aponta para um IO_RESOURCE_REQUIREMENTS_LIST que contém os requisitos de recursos de hardware para o dispositivo. O ponteiro será NULL se o dispositivo não consumir recursos de hardware.

Parameters.FilterResourceRequirements.IoResourceRequirementList também aponta para um IO_RESOURCE_REQUIREMENTS_LIST, mas o driver de função deve usar a lista no bloco IoStatus .

Parâmetros de saída

Retornado no bloco status de E/S.

Bloco de Status de E/S

Se um driver de função manipular esse IRP, ele o manipulará no caminho de backup do IRP na pilha. Se o driver de função manipular o IRP com êxito, ele definirá Irp-IoStatus.Status> como STATUS_SUCCESS e definirá Irp-IoStatus.Information> como um ponteiro para um IO_RESOURCE_REQUIREMENTS_LIST que contém os requisitos de recursos filtrados. Consulte a seção "Operação" abaixo para obter mais informações sobre como definir a lista de recursos filtrados. Se um driver de função encontrar um erro ao manipular esse IRP, ele definirá o erro em Irp-IoStatus.Status>. Se um driver de função não manipular esse IRP, ele usará IoSkipCurrentIrpStackLocation para passar o IRP para baixo na pilha inalterado.

Os drivers de filtro superior e inferior não lidam com esse IRP. Esse driver chama IoSkipCurrentIrpStackLocation, passa o IRP para o próximo driver, não deve modificar Irp-IoStatus> e não deve concluir o IRP.

O motorista do ônibus pai não lida com esse IRP. Ele deixa Irp-IoStatus> como está e conclui o IRP.

Operação

O gerenciador PnP envia uma solicitação IRP_MN_QUERY_RESOURCE_REQUIREMENTS ao driver de barramento pai para o dispositivo, antes que o driver de função tenha anexado seu objeto de dispositivo à pilha do dispositivo. Para dar ao driver de função a oportunidade de modificar os requisitos de recursos do dispositivo, se apropriado, o gerenciador PnP posteriormente envia uma solicitação de IRP_MN_FILTER_RESOURCE_REQUIREMENTS para a pilha completa do dispositivo. O gerenciador PnP envia esse IRP antes de alocar recursos de hardware para o dispositivo durante a configuração inicial do dispositivo. O gerenciador PnP também pode enviar esse IRP durante o rebalanceamento de recursos.

Quando o gerenciador PnP envia esse IRP, ele fornece à pilha de driver uma lista de requisitos de recursos, que os drivers podem modificar e retornar. O gerenciador PnP fornece um dos seguintes tipos de lista de requisitos de recursos (listados em ordem de prioridade):

  • Configuração forçada (modificada de uma lista de recursos para uma lista de requisitos de recursos)

  • Substituir configuração

  • Configuração básica

  • Configuração de inicialização (modificada de uma lista de recursos para uma lista de requisitos de recursos)

Se um driver de função manipular esse IRP, ele deverá definir uma rotina de conclusão e manipular o IRP no caminho de backup da pilha do dispositivo. Consulte Plug and Play para obter informações sobre como lidar com um PnP IRP no caminho de backup da pilha do dispositivo.

Se o driver de função não estiver alterando o tamanho da lista atual apontada por Irp-IoStatus.Information>, o driver poderá modificar a lista no local. Se o driver precisar alterar o tamanho da lista de requisitos, o driver deverá alocar uma nova lista de IO_RESOURCE_REQUIREMENTS_LIST da memória paginada e liberar a lista anterior. O gerenciador PnP libera a estrutura retornada quando ela não é mais necessária.

Um driver de função deve preservar a ordem dos recursos na lista apontada por Irp-IoStatus.Information> e não deve alterar as marcas de recurso que ele não manipula. O driver deve ter cuidado para ajustar a lista de requisitos de uma maneira compatível com o barramento pai do dispositivo. Se um driver de função adicionar um novo recurso à lista de requisitos e esse recurso for atribuído ao dispositivo, o driver de função deverá filtrar esse recurso do IRP_MN_START_DEVICE antes de passar o IRP inicial para o driver de barramento.

Se o driver de função do dispositivo não manipular esse IRP, o gerenciador de PnP usará os requisitos de recurso conforme especificado pelo driver de barramento pai em resposta à solicitação de IRP_MN_QUERY_RESOURCE_REQUIREMENTS .

Um driver de função deve estar preparado para lidar com esse IRP para um dispositivo a qualquer momento depois que a rotina AddDevice do driver tiver sido chamada para o dispositivo.

Consulte Plug and Play para obter as regras gerais para lidar com Plug and Play IRPs menores.

Enviando este IRP

Reservado para uso do sistema. Os drivers não devem enviar este IRP.

Requisitos

parâmetro

Wdm.h (inclua Wdm.h, Ntddk.h ou Ntifs.h)

Confira também

ExAllocatePoolWithTag

ExFreePool

IO_RESOURCE_REQUIREMENTS_LIST

IRP_MN_START_DEVICE