Partilhar via


IRP_MN_READ_CONFIG

Os motoristas de ônibus para ônibus com espaço de configuração devem lidar com essa solicitação para seus dispositivos filho (PDOs filho). Os drivers de funções e de filtro não lidam com essa solicitação.

Valor

0x0F

Código principal

IRP_MJ_PNP

Quando enviado

Um driver ou outro componente do sistema envia esse IRP para ler o espaço de configuração do barramento pai de um dispositivo.

Um driver ou outro componente do sistema envia esse IRP no IRQL < DISPATCH_LEVEL em um contexto de thread arbitrário.

Parâmetros de Entrada

O membro Parameters.ReadWriteConfig da estrutura IO_STACK_LOCATION é uma estrutura que contém as seguintes informações:

ULONG WhichSpace;
PVOID Buffer;
ULONG Offset;
ULONG Length

Os membros da estrutura podem ser interpretados de forma diferente por diferentes motoristas de ônibus, mas os membros normalmente são definidos da seguinte maneira:

WhichSpace
Especifica qual área de memória acessar. Esse parâmetro pode usar os seguintes valores:

Valor Barramento Significado

PCI_WHICHSPACE_CONFIG

PCI

Espaço de configuração de PCI.

PCI_WHICHSPACE_ROM

PCI

Memória somente leitura.

PCCARD_COMMON_MEMORY

PCCARD_COMMON_MEMORY_INDIRECT

PCMCIA

Memória principal do PCCARD.

PCCARD_ATTRIBUTE_MEMORY

PCCARD_ATTRIBUTE_MEMORY_INDIRECT

PCMCIA

Espaço do atributo PCMCIA (configuração).

PCCARD_PCI_CONFIGURATION_SPACE

PCMCIA

Espaço de configuração de PCI.

Os valores PCI_XXX são definidos em Wdm.h. Os valores PCCARD_XXX são definidos em Ntddpcm.h.

Buffer
Aponta para um buffer no qual retornar as informações solicitadas. O componente que envia o IRP aloca essa estrutura da memória paginada. O formato do buffer é específico do barramento.

Deslocamento
Especifica um deslocamento para o espaço de configuração.

Comprimento
Especifica o número de bytes a serem lidos.

Parâmetros de saída

Em caso de êxito, um driver de barramento preenche o buffer em Parameters.ReadWriteConfig.Buffer com os dados solicitados.

Bloco de Status de E/S

Um motorista de ônibus define Irp-IoStatus.Status> como STATUS_SUCCESS ou para um erro apropriado status como STATUS_INVALID_PARAMETER_n, STATUS_NO_SUCH_DEVICE ou STATUS_DEVICE_NOT_READY.

Em caso de êxito, um motorista de ônibus define Irp-IoStatus.Information> como o número de bytes retornados.

Se um motorista de ônibus não conseguir concluir essa solicitação imediatamente, ele poderá marcar o IRP pendente, retornar STATUS_PENDING e concluir o IRP posteriormente.

Operação

Um motorista de ônibus manipula esse IRP para seus dispositivos filho (PDOs filho).

Os drivers de função e filtro não lidam com esse IRP; eles passam para o próximo driver inferior sem alterações em Irp-IoStatus>. Status e eles não definem uma rotina IoCompletion.

Um driver de barramento que manipula essa solicitação deve marcar o parâmetro WhichSpace para garantir que ele contenha um valor compatível com o driver.

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

Enviando este IRP

Normalmente, um driver de função envia esse IRP para o driver superior na pilha de dispositivos à qual ele está anexado e o IRP é manipulado pelo driver de barramento pai.

Consulte Manipulando IRPs para obter informações sobre como enviar IRPs. As seguintes etapas se aplicam especificamente a este IRP:

  • Aloque um buffer de um pool paginado e inicialize-o para zeros.

  • Defina os valores no próximo local da pilha de E/S do IRP: defina MajorFunctioncomo IRP_MJ_PNP, defina MinorFunctioncomo IRP_MN_READ_CONFIG e defina os valores apropriados em Parameters.ReadWriteConfig.

  • Inicialize IoStatus.Status para STATUS_NOT_SUPPORTED.

  • Desaloque o IRP e o buffer quando eles não forem mais necessários.

Os drivers devem enviar esse IRP da DISPATCH_LEVEL IRQL < .

Um driver pode acessar o espaço de configuração de um barramento em DISPATCH_LEVEL por meio de uma rotina de interface de barramento, se o driver de barramento pai der suporte a essa interface. Para obter uma interface de barramento, um driver envia uma solicitação IRP_MN_QUERY_INTERFACE para a pilha de dispositivos na qual o driver está anexado. Em seguida, o driver chama a rotina apropriada retornada na interface .

Por exemplo, para ler o espaço de configuração do DISPATCH_LEVEL, um driver pode chamar IRP_MN_QUERY_INTERFACE durante a inicialização do driver para obter a interface BUS_INTERFACE_STANDARD do driver de barramento pai. O driver envia o IRP de consulta do IRQL PASSIVE_LEVEL. Posteriormente, a partir do código no DISPATCH_LEVEL IRQL, o driver chama a rotina apropriada retornada na interface, como a rotina Interface.GetBusData .

Requisitos

parâmetro

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

Confira também

IRP_MN_QUERY_INTERFACE

IRP_MN_WRITE_CONFIG