PFLUSH_ADAPTER_BUFFERS_EX función de devolución de llamada (wdm.h)
La rutina FlushAdapterBuffersEx vacía los datos que permanecen en la memoria caché de datos al final de una operación de transferencia de DMA realizada por un controlador DMA del sistema o un dispositivo bus-master.
Sintaxis
PFLUSH_ADAPTER_BUFFERS_EX PflushAdapterBuffersEx;
NTSTATUS PflushAdapterBuffersEx(
[in] PDMA_ADAPTER DmaAdapter,
[in] PMDL Mdl,
[in] PVOID MapRegisterBase,
[in] ULONGLONG Offset,
[in] ULONG Length,
[in] BOOLEAN WriteToDevice
)
{...}
Parámetros
[in] DmaAdapter
Puntero a una estructura DMA_ADAPTER . Esta estructura es el objeto de adaptador que representa el canal DMA del sistema del controlador o el dispositivo bus-master. El autor de la llamada obtuvo este puntero de una llamada anterior a la rutina IoGetDmaAdapter .
[in] Mdl
Puntero a la cadena MDL que describe las páginas de memoria que se van a vaciar. Establezca este parámetro para que apunte a la cadena MDL que se usó para la transferencia DMA. Para obtener más información, vea la descripción del parámetro Mdl en GetScatterGatherListEx, BuildScatterGatherListEx o MapTransferEx.
[in] MapRegisterBase
Identificador de los registros de mapa asignados previamente para el objeto de adaptador.
[in] Offset
Desplazamiento inicial relativo al inicio de la cadena MDL que se va a usar para la operación de vaciado. Establezca este parámetro en el valor que se usó como desplazamiento inicial para la transferencia DMA. Para obtener más información, vea la descripción del parámetro Offset en GetScatterGatherListEx, BuildScatterGatherListEx o MapTransferEx.
[in] Length
Número de bytes de datos que se van a vaciar. Establezca este parámetro en el valor que se usó como longitud de transferencia para la transferencia DMA. Para obtener más información, vea la descripción del parámetro Length en GetScatterGatherListEx, BuildScatterGatherListEx o MapTransferEx.
[in] WriteToDevice
Dirección de la transferencia DMA. Establezca este parámetro en el valor que se usó como dirección de transferencia para la transferencia de DMA. Para obtener más información, vea la descripción del parámetro WriteToDevice en GetScatterGatherListEx, BuildScatterGatherListEx o MapTransferEx.
Valor devuelto
FlushAdapterBuffersEx devuelve STATUS_SUCCESS si la llamada se realiza correctamente. Entre los posibles valores devueltos de error se incluyen los siguientes códigos de estado.
Código devuelto | Descripción |
---|---|
|
Error en la rutina debido a valores de parámetros no válidos pasados por el autor de la llamada. |
Comentarios
FlushAdapterBuffersEx no es una rutina del sistema a la que se puede llamar directamente por su nombre. Solo el puntero de la dirección devuelta en una estructura de DMA_OPERATIONS puede llamar a esta rutina . Los controladores obtienen la dirección de esta rutina llamando a IoGetDmaAdapter con el miembro Version del parámetro DeviceDescription establecido en DEVICE_DESCRIPTION_VERSION3. Si IoGetDmaAdapter devuelve NULL, la rutina no está disponible en la plataforma.
FlushAdapterBuffersEx permite la coherencia de caché del procesador en plataformas de hardware que no implementan la coherencia de caché aplicada por hardware (snooping de bus). Además, para una transferencia DMA del sistema, FlushAdapterBuffersEx vacía los datos que permanecen en la caché interna del controlador DMA del sistema.
El controlador que inicia una transferencia de DMA de dispersión o recopilación debe asegurarse de que todos los datos transferidos se vacían de la memoria caché una vez completada la transferencia. El controlador debe llamar a FlushAdapterBuffersEx antes de que el controlador complete el IRP que solicitó la transferencia de DMA y antes de que el controlador libere los registros del mapa. Para obtener más información, consulte Vaciado de datos almacenados en caché durante las operaciones de DMA.
FlushAdapterBuffersEx es una versión extendida de la rutina FlushAdapterBuffers . FlushAdapterBuffersEx puede vaciar una lista de dispersión o recopilación completa en una llamada. Por el contrario, para usar FlushAdapterBuffers para vaciar una lista de dispersión y recopilación, se requiere una llamada independiente para cada MDL de la cadena MDL.
FlushAdapterBuffersEx se puede usar en lugar de FlushAdapterBuffers para vaciar el búfer para una transferencia DMA de un paquete. En este caso, la cadena MDL a la que apunta el parámetro Mdl contiene solo una MDL. Una ventaja de usar FlushAdapterBuffersEx de esta manera es que el autor de la llamada puede especificar un desplazamiento en mdl.
Si se llama a FlushAdapterBuffersEx antes de que finalice la operación de transferencia de DMA, esta llamada podría cancelar la transferencia antes de que pueda finalizar o podría provocar un comportamiento indefinido.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible a partir de Windows 8. |
Plataforma de destino | Escritorio |
Encabezado | wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | <= DISPATCH_LEVEL |