Compartir a través de


Función KeFlushIoBuffers (wdm.h)

El KeFlushIoBuffers rutina vacía la región de memoria descrita por una MDL de las memorias caché de todos los procesadores.

Sintaxis

void KeFlushIoBuffers(
  [in] PMDL    Mdl,
  [in] BOOLEAN ReadOperation,
  [in] BOOLEAN DmaOperation
);

Parámetros

[in] Mdl

Puntero a una MDL que describe el intervalo del búfer de E/S.

[in] ReadOperation

Especifica TRUE si se realiza el vaciado para una operación de lectura y FALSE para una operación de escritura. Para obtener más información, vea la siguiente sección Comentarios.

[in] DmaOperation

Especifica TRUE para una transferencia DMA, FALSE para PIO.

Valor devuelto

Ninguno

Observaciones

Los controladores llaman a keFlushIoBuffers para mantener la integridad de los datos durante las operaciones de transferencia de dispositivos DMA o PIO. Llamar a esta rutina afecta a todos los procesadores de la máquina.

Si ReadOperation es TRUE, el controlador lee información del dispositivo a la memoria del sistema, por lo que los datos válidos todavía pueden estar en la instrucción del procesador y las cachés de datos. KeFlushIoBuffers vacía los datos de todas las memorias caché del procesador en la memoria del sistema, incluido el procesador en el que se ejecuta el autor de la llamada.

Si ReadOperation es FALSE, el controlador escribe datos de la memoria del sistema en un dispositivo, por lo que es posible que los datos válidos estén en la caché de datos del procesador, pero aún no se transfieren al dispositivo. KeFlushIoBuffers vacía las memorias caché de datos de todos los procesadores, incluido el del procesador en el que se ejecuta el autor de la llamada.

Como regla general, los controladores deben llamar a KeFlushIoBuffers justo antes de comenzar una operación de transferencia DMA o inmediatamente después de cualquier operación de lectura de PIO.

KeFlushIoBuffers vacía solo la región de memoria que describe la MDL a la que apunta el parámetro Mdl. Para vaciar todas las regiones de memoria descritas por una cadena MDL requiere una KeFlushIoBuffers independiente llamada para cada MDL de la cadena.

Para obtener más información, consulte los temas siguientes:

vaciar datos almacenados en caché durante las operaciones de DMAvaciar los datos almacenados en caché durante las operaciones de PIO

Requisitos

Requisito Valor
cliente mínimo admitido Disponible a partir de Windows 2000.
de la plataforma de destino de Universal
encabezado de wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL <= DISPATCH_LEVEL
reglas de cumplimiento de DDI MdlAfterReqCompletedIntIoctlA(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedReadA(kmdf), MdlAfterReqCompletedWriteA(kmdf)

Consulte también

FlushAdapterBuffers