KeFlushIoBuffers 함수(wdm.h)
KeFlushIoBuffers 루틴은 모든 프로세서의 캐시에서 MDL에 의해 설명된 메모리 영역을 플러시합니다.
통사론
void KeFlushIoBuffers(
[in] PMDL Mdl,
[in] BOOLEAN ReadOperation,
[in] BOOLEAN DmaOperation
);
매개 변수
[in] Mdl
I/O 버퍼의 범위를 설명하는 MDL에 대한 포인터입니다.
[in] ReadOperation
읽기 작업에 대해 플러시가 수행되는 경우 TRUE 지정하고 쓰기 작업에 대해 FALSE . 자세한 내용은 다음 설명 섹션을 참조하세요.
[in] DmaOperation
PIO에 대한 FALSE DMA 전송에 대한 TRUE 지정합니다.
반환 값
없음
발언
드라이버는 DMA 또는 PIO 디바이스 전송 작업 중에 데이터 무결성을 유지하기 위해 KeFlushIoBuffers 호출합니다. 이 루틴을 호출하면 컴퓨터의 모든 프로세서에 영향을 줍니다.
ReadOperation TRUE 경우 드라이버는 디바이스에서 시스템 메모리로 정보를 읽고 있으므로 유효한 데이터는 여전히 프로세서 명령 및 데이터 캐시에 있을 수 있습니다. KeFlushIoBuffers 호출자가 실행 중인 프로세서를 포함하여 모든 프로세서의 캐시에서 시스템 메모리로 데이터를 플러시합니다.
ReadOperation FALSE 경우 드라이버는 시스템 메모리에서 디바이스로 데이터를 작성하므로 유효한 데이터는 프로세서의 데이터 캐시에 있지만 아직 디바이스로 전송되지 않을 수 있습니다. KeFlushIoBuffers 호출자가 실행 중인 프로세서를 포함하여 모든 프로세서의 데이터 캐시를 플러시합니다.
일반적으로 드라이버는 DMA 전송 작업을 시작하기 직전에 또는 PIO 읽기 작업 바로 다음에 KeFlushIoBuffers를 호출해야 합니다.
KeFlushIoBuffersMdl 매개 변수가 가리키는 MDL에서 설명하는 메모리 영역만 플러시합니다. MDL 체인에서 설명하는 모든 메모리 영역을 플러시하려면 체인의 각 MDL에 대한 호출을 별도의 KeFlushIoBuffers가 필요합니다.
자세한 내용은 다음 항목을 참조하세요.
PIO 작업 중 캐시된 데이터 플러시DMA 작업 중 캐시된 데이터 플러시
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000부터 사용할 수 있습니다. |
대상 플랫폼 | 보편적 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 규정 준수 규칙 | MdlAfterReqCompletedIntIoctlA(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedReadA(kmdf), MdlAfterReqCompletedWriteA(kmdf) |