PFLUSH_ADAPTER_BUFFERS función de devolución de llamada (wdm.h)
La rutina FlushAdapterBuffers vacía los datos restantes en la memoria caché interna del controlador DMA del sistema o en la caché interna del adaptador de bus-master al final de una operación de transferencia de DMA.
Sintaxis
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
Puntero a la estructura DMA_ADAPTER devuelta por IoGetDmaAdapter que representa el adaptador de bus-master o el controlador DMA.
[in] Mdl
Puntero al MDL que describe el búfer pasado anteriormente en la llamada del controlador a MapTransfer.
[in] MapRegisterBase
Especifica los registros de asignación asignados para la operación DMA. El sistema pasa este valor a la rutina AdapterControl del controlador.
[in] CurrentVa
Puntero a la dirección virtual actual del búfer, descrita por Mdl, donde se produjo la operación de E/S. Este valor debe ser el mismo que el valor de CurrentVa inicial pasado a MapTransfer.
[in] Length
Especifica la longitud, en bytes, del búfer.
[in] WriteToDevice
Especifica la dirección de la operación de transferencia DMA: TRUE para una transferencia desde un búfer en la memoria del sistema al dispositivo del controlador.
Valor devuelto
FlushAdapterBuffers devuelve TRUE si los datos restantes en la caché interna del adaptador de controlador DMA o del adaptador de bus-master se han vaciado correctamente en la memoria del sistema o fuera del dispositivo.
Comentarios
FlushAdapterBuffers no es una rutina del sistema a la que se puede llamar directamente por su nombre. Esta rutina solo se puede llamar por puntero de la dirección devuelta en una estructura de DMA_OPERATIONS . Los controladores obtienen la dirección de esta rutina llamando a IoGetDmaAdapter.
Para asegurarse de que se complete una transferencia DMA, todos los controladores que realicen operaciones DMA deben llamar a FlushAdapterBuffers antes de completar el IRP que solicitó la transferencia DMA y antes de liberar los registros del mapa.
Un controlador puede obtener la currentVa inicial para el inicio de una transferencia DMA basada en paquetes llamando a MmGetMdlVirtualAddress. Sin embargo, el valor devuelto es un índice en mdl, en lugar de una dirección virtual válida. Si el controlador debe dividir una solicitud de transferencia grande en más de una operación DMA, debe actualizar CurrentVa y Length para cada operación DMA.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible a partir de Windows 2000. |
Plataforma de destino | Escritorio |
Encabezado | wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | <= DISPATCH_LEVEL |
Reglas de cumplimiento de DDI | IrqlDispatch(wdm) |