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 em camadas 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 configurará 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 solicitações de leitura de entrada em uma ordem determinada pelo driver na fila do dispositivo ou em uma fila interna gerenciada por 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 IFS (Sistema de Arquivos Instaível).

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 pela MDL em Irp-MdlAddress> se o driver de dispositivo subjacente usar DMA ouEI (E/S direta).

Operação

Após o recebimento de uma solicitação de leitura, um driver de nível superior configura o local da pilha de E/S no IRP para o próximo driver inferior 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 por driver, chamando IoSetCompletionRoutine. Em seguida, o driver passa a solicitação para o próximo driver inferior com IoCallDriver.

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

Requisitos

Cabeçalho

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

Confira também

DispatchRead

DispatchReadWrite

IoCallDriver

IoSetCompletionRoutine