Функция KeFlushIoBuffers (wdm.h)
Программа KeFlushIoBuffers очищает область памяти, описанную MDL из кэшей всех процессоров.
Синтаксис
void KeFlushIoBuffers(
[in] PMDL Mdl,
[in] BOOLEAN ReadOperation,
[in] BOOLEAN DmaOperation
);
Параметры
[in] Mdl
Указатель на MDL, описывающий диапазон для буфера ввода-вывода.
[in] ReadOperation
Указывает TRUE, если очистка выполняется для операции чтения и FALSE для операции записи. Дополнительные сведения см. в следующем разделе "Примечания".
[in] DmaOperation
Указывает TRUE для передачи DMA, FALSE для PIO.
Возвращаемое значение
Никакой
Замечания
Драйверы вызывают KeFlushIoBuffers для поддержания целостности данных во время операций передачи устройств DMA или PIO. Вызов этой подпрограммы влияет на все процессоры на компьютере.
Если readOperationTRUE, драйвер считывает сведения с устройства в системную память, поэтому допустимые данные по-прежнему могут находиться в инструкциях процессора и кэшах данных. KeFlushIoBuffers сбрасывает данные из кэшей всех процессоров в системную память, включая процессор, на котором выполняется вызывающий объект.
Если readOperationFALSE, драйвер записывает данные из системной памяти на устройство, поэтому допустимые данные могут находиться в кэше данных процессора, но еще не переданы на устройство. KeFlushIoBuffers сбрасывает кэши данных всех процессоров, включая процессор, на котором запущен вызывающий объект.
Как правило, водители должны вызывать KeFlushIoBuffers непосредственно перед началом операции передачи DMA или немедленно после любой операции чтения PIO.
KeFlushIoBuffers сбрасывает только область памяти, описанную MDL, на которую указывает параметр MDL Mdl. Для очистки всех областей памяти, описанных цепочкой MDL, требуется отдельный KeFlushIoBuffers вызов для каждого MDL в цепочке.
Дополнительные сведения см. в следующих разделах:
очистка кэшированных данных во время операций DMAочистка кэшированных данных во время операций piO
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно начиная с Windows 2000. |
целевая платформа | Всеобщий |
заголовка | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
правил соответствия DDI | MdlAfterReqCompletedIntIoctlA(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedReadA(kmdf), MdlAfterReqCompletedWriteA(kmdf) |