Compartilhar via


IRP_MN_WRITE_CONFIG

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

Valor

0x10

Código principal

IRP_MJ_PNP

Quando enviado

Um driver ou outro componente do sistema envia esse IRP para gravar dados no 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

Parameters.ReadWriteConfig é 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 o espaço de configuração. Para obter informações sobre valores que podem ser especificados para o WhichSpace, consulte IRP_MN_READ_CONFIG.

Buffer
Aponta para um buffer que contém os dados a serem gravados. 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 gravados.

Parâmetros de saída

Retornado no bloco status de E/S.

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.

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

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 não definem uma rotina IoCompletion.

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 a pilha do dispositivo à qual ele está anexado e o IRP é manipulado pelo driver de ônibus pai.

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

  • Aloque um buffer do pool de páginas e inicialize-o com os dados a serem gravados.

  • Defina os valores no próximo local de pilha de E/S do IRP: defina MajorFunction como IRP_MJ_PNP, defina MinorFunction como IRP_MN_WRITE_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 do IRQL < DISPATCH_LEVEL.

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 motorista do barramento pai exportar essa interface. Para obter uma interface de ônibus, um motorista envia uma solicitação de IRP_MN_QUERY_INTERFACE para seu motorista de ônibus pai. Em seguida, o driver chama a rotina apropriada retornada na interface .

Por exemplo, para gravar o espaço de configuração de 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 ônibus pai. O driver envia a consulta IRP 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.SetBusData .

Requisitos

parâmetro

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

Confira também

IRP_MN_QUERY_INTERFACE

IRP_MN_READ_CONFIG