Compartilhar via


IRP_MJ_READ

Cada driver de dispositivo que transfere dados de seu dispositivo para o sistema deve lidar com solicitações de leitura em uma rotina DispatchRead ou DispatchReadWrite , assim como qualquer driver de nível superior sobre esse driver de dispositivo.

Quando enviado

A qualquer momento após a conclusão bem-sucedida de uma solicitação de criação.

Possivelmente, um aplicativo de modo de usuário ou componente Win32 com um identificador para o objeto de arquivo que representa o objeto de dispositivo de destino solicitou uma transferência de dados do dispositivo. Possivelmente, um driver de nível superior criou e configurou o IRP de leitura.

Parâmetros de Entrada

O local da pilha de E/S do driver no IRP indica quantos bytes transferir em Parameters.Read.Length.

Alguns drivers usam o valor em Parameters.Read.Key para classificar as solicitações de leitura de entrada em uma ordem determinada pelo driver na fila do dispositivo ou em uma fila interna gerenciada pelo driver de IRPs.

Determinados tipos de drivers também usam o valor em Parameters.Read.ByteOffset, que indica o deslocamento inicial para a operação de transferência. Por exemplo, consulte o tópico IRP_MJ_READ na documentação do SISTEMA de Arquivos Instalável (IFS).

Parâmetros de saída

Dependendo se o driver de dispositivo subjacente configura os Sinalizadores do objeto de dispositivo de destino com DO_BUFFERED_IO ou com DO_DIRECT_IO, os dados são transferidos para um dos seguintes:

  • O buffer em Irp-AssociatedIrp.SystemBuffer> se o driver usar E/S em buffer.

  • O buffer descrito pelo MDL em Irp-MdlAddress> se o driver de dispositivo subjacente usar E/S direta (DMA ou PIO).

Operação

Ao receber uma solicitação de leitura, um driver de nível superior configura o local da pilha de E/S no IRP para o driver mais baixo ou cria e configura IRPs adicionais para um ou mais drivers inferiores. Ele pode configurar sua rotina IoCompletion , que é opcional para o IRP de entrada, mas necessário para IRPs criados pelo driver, chamando IoSetCompletionRoutine. Em seguida, o driver passa a solicitação para o driver mais baixo com IoCallDriver.

Ao receber uma solicitação de leitura, um driver de dispositivo transfere dados de seu dispositivo para a memória do sistema. O driver do dispositivo define o campo Informações do bloco de E/S status para o número de bytes transferidos quando ele conclui o IRP.

Requisitos

parâmetro

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

Confira também

DispatchRead

DispatchReadWrite

IoCallDriver

IoSetCompletionRoutine