PFLUSH_ADAPTER_BUFFERS função de retorno de chamada (wdm.h)

A rotina FlushAdapterBuffers libera todos os dados restantes no cache interno do controlador de DMA do sistema ou em um cache interno do adaptador master de barramento no final de uma operação de transferência de DMA.

Sintaxe

PFLUSH_ADAPTER_BUFFERS PflushAdapterBuffers;

BOOLEAN PflushAdapterBuffers(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PMDL Mdl,
  [in] PVOID MapRegisterBase,
  [in] PVOID CurrentVa,
  [in] ULONG Length,
  [in] BOOLEAN WriteToDevice
)
{...}

Parâmetros

[in] DmaAdapter

Ponteiro para a estrutura DMA_ADAPTER retornada por IoGetDmaAdapter que representa o adaptador de master de barramento ou o controlador de DMA.

[in] Mdl

Ponteiro para o MDL que descreve o buffer passado anteriormente na chamada do driver para MapTransfer.

[in] MapRegisterBase

Especifica os registros de mapa alocados para a operação de AMD. O sistema passa esse valor para a rotina AdapterControl do driver.

[in] CurrentVa

Ponteiro para o endereço virtual atual no buffer, descrito pelo Mdl, em que a operação de E/S ocorreu. Esse valor deve ser o mesmo que o valor currentva inicial passado para MapTransfer.

[in] Length

Especifica o comprimento, em bytes, do buffer.

[in] WriteToDevice

Especifica a direção da operação de transferência de DMA: TRUE para uma transferência de um buffer na memória do sistema para o dispositivo do driver.

Retornar valor

FlushAdapterBuffers retornará TRUE se os dados restantes no cache interno do controlador de DMA ou do master de barramento tiverem sido liberados com êxito na memória do sistema ou no dispositivo.

Comentários

FlushAdapterBuffers não é uma rotina do sistema que pode ser chamada diretamente pelo nome. Essa rotina só pode ser chamada pelo ponteiro do endereço retornado em uma estrutura de DMA_OPERATIONS . Os drivers obtêm o endereço dessa rotina chamando IoGetDmaAdapter.

Para garantir que uma transferência de DMA seja concluída, cada driver que executa operações de DMA deve chamar FlushAdapterBuffers antes de concluir o IRP que solicitou a transferência de DMA e antes de liberar os registros de mapa.

Um driver pode obter o CurrentVa inicial para o início de uma transferência de DMA baseada em pacote chamando MmGetMdlVirtualAddress. No entanto, o valor retornado é um índice no Mdl, em vez de um endereço virtual válido. Se o driver precisar dividir uma solicitação de transferência grande em mais de uma operação de DMA, ele deverá atualizar CurrentVa e Length para cada operação de DMA.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 2000.
Plataforma de Destino Área de Trabalho
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL <= DISPATCH_LEVEL
Regras de conformidade da DDI IrqlDispatch(wdm)

Confira também

AllocateAdapterChannel

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

KeFlushIoBuffers

MapTransfer

MmGetMdlVirtualAddress