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
DMA 전송의 경우 TRUE , PIO의 경우 FALSE 를 지정합니다.
반환 값
없음
설명
드라이버는 DMA 또는 PIO 디바이스 전송 작업 중에 데이터 무결성을 유지하기 위해 KeFlushIoBuffers 를 호출합니다. 이 루틴을 호출하면 컴퓨터의 모든 프로세서에 영향을 줍니다.
ReadOperation이 TRUE이면 드라이버가 디바이스에서 시스템 메모리로 정보를 읽고 있으므로 유효한 데이터는 여전히 프로세서 명령 및 데이터 캐시에 있을 수 있습니다. KeFlushIoBuffers 는 호출자가 실행 중인 프로세서를 포함하여 모든 프로세서의 캐시에서 시스템 메모리로 데이터를 플러시합니다.
ReadOperation이 FALSE이면 드라이버가 시스템 메모리에서 디바이스로 데이터를 작성하므로 유효한 데이터는 프로세서의 데이터 캐시에 있지만 아직 디바이스로 전송되지 않을 수 있습니다. KeFlushIoBuffers 는 호출자가 실행 중인 프로세서를 포함하여 모든 프로세서의 데이터 캐시를 플러시합니다.
일반적으로 드라이버는 DMA 전송 작업을 시작하기 직전에 또는 PIO 읽기 작업 바로 다음에 KeFlushIoBuffers 를 호출해야 합니다.
KeFlushIoBuffers 는 Mdl 매개 변수가 가리키는 MDL에서 설명하는 메모리 영역만 플러시합니다. MDL 체인에서 설명하는 모든 메모리 영역을 플러시하려면 체인의 각 MDL에 대해 별도의 KeFlushIoBuffers 호출이 필요합니다.
자세한 내용은 아래 항목을 참조하세요.
DMA 작업 중 캐시된 데이터플러시 PIO 작업 중 캐시된 데이터 플러시
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | 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) |