Compartilhar via


IRP_MJ_WRITE

Cada driver de dispositivo que transfere dados do sistema para seu dispositivo deve lidar com solicitações de gravação em uma rotina DispatchWrite 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 para o dispositivo. Possivelmente, um driver de nível superior criou e configurou o IRP de gravação.

Parâmetros de Entrada

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

Alguns drivers usam o valor em Parameters.Write.Key para classificar solicitações de gravação 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.Write.ByteOffset, que indica o deslocamento inicial para a operação de transferência. Por exemplo, consulte o tópico IRP_MJ_WRITE na documentação do IFS (Sistema de Arquivos Instalável).

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

Parâmetros de saída

Nenhum

Operação

Ao receber uma solicitação de gravação, 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 inferior seguinte com IoCallDriver.

Ao receber uma solicitação de gravação, um driver de dispositivo transfere dados da memória do sistema para seu dispositivo. O driver do dispositivo define o campo Informações do bloco de status de E/S como 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

DispatchReadWrite

DispatchWrite

IoCallDriver

IoCompletion

IoSetCompletionRoutine