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 를 호출합니다. 이 루틴을 호출하면 컴퓨터의 모든 프로세서에 영향을 줍니다.

ReadOperationTRUE이면 드라이버가 디바이스에서 시스템 메모리로 정보를 읽고 있으므로 유효한 데이터는 여전히 프로세서 명령 및 데이터 캐시에 있을 수 있습니다. KeFlushIoBuffers 는 호출자가 실행 중인 프로세서를 포함하여 모든 프로세서의 캐시에서 시스템 메모리로 데이터를 플러시합니다.

ReadOperationFALSE이면 드라이버가 시스템 메모리에서 디바이스로 데이터를 작성하므로 유효한 데이터는 프로세서의 데이터 캐시에 있지만 아직 디바이스로 전송되지 않을 수 있습니다. KeFlushIoBuffers 는 호출자가 실행 중인 프로세서를 포함하여 모든 프로세서의 데이터 캐시를 플러시합니다.

일반적으로 드라이버는 DMA 전송 작업을 시작하기 직전에 또는 PIO 읽기 작업 바로 다음에 KeFlushIoBuffers 를 호출해야 합니다.

KeFlushIoBuffersMdl 매개 변수가 가리키는 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)

추가 정보

FlushAdapterBuffers