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