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
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) |