PFLUSH_ADAPTER_BUFFERS 콜백 함수(wdm.h)

FlushAdapterBuffers 루틴은 DMA 전송 작업이 끝날 때 시스템 DMA 컨트롤러의 내부 캐시 또는 버스 master 어댑터의 내부 캐시에 남아 있는 모든 데이터를 플러시합니다.

구문

PFLUSH_ADAPTER_BUFFERS PflushAdapterBuffers;

BOOLEAN PflushAdapterBuffers(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PMDL Mdl,
  [in] PVOID MapRegisterBase,
  [in] PVOID CurrentVa,
  [in] ULONG Length,
  [in] BOOLEAN WriteToDevice
)
{...}

매개 변수

[in] DmaAdapter

버스 master 어댑터 또는 DMA 컨트롤러를 나타내는 IoGetDmaAdapter에서 반환된 DMA_ADAPTER 구조체에 대한 포인터입니다.

[in] Mdl

MapTransfer에 대한 드라이버 호출에서 이전에 전달된 버퍼를 설명하는 MDL에 대한 포인터입니다.

[in] MapRegisterBase

DMA 작업에 할당된 맵 레지스터를 지정합니다. 시스템은 이 값을 드라이버의 AdapterControl 루틴에 전달합니다.

[in] CurrentVa

I/O 작업이 발생한 Mdl에서 설명하는 버퍼의 현재 가상 주소에 대한 포인터입니다. 이 값은 MapTransfer에 전달된 초기 CurrentVa 값과 동일해야 합니다.

[in] Length

버퍼의 길이(바이트)를 지정합니다.

[in] WriteToDevice

DMA 전송 작업의 방향을 지정합니다. 시스템 메모리의 버퍼에서 드라이버의 디바이스로 전송하는 경우 TRUE 입니다.

반환 값

FlushAdapterBuffers는 DMA 컨트롤러 또는 버스 master 어댑터의 내부 캐시에 남아 있는 데이터가 시스템 메모리 또는 디바이스로 성공적으로 플러시된 경우 TRUE를 반환합니다.

설명

FlushAdapterBuffers 는 이름으로 직접 호출할 수 있는 시스템 루틴이 아닙니다. 이 루틴은 DMA_OPERATIONS 구조에서 반환된 주소의 포인터로만 호출할 수 있습니다. 드라이버는 IoGetDmaAdapter를 호출하여 이 루틴의 주소를 가져옵니다.

DMA 전송이 완료되도록 하려면 DMA 전송을 요청한 IRP를 완료하고 맵 레지스터를 해제하기 전에 DMA 작업을 수행하는 모든 드라이버가 FlushAdapterBuffers 를 호출해야 합니다.

드라이버는 MmGetMdlVirtualAddress를 호출하여 패킷 기반 DMA 전송의 시작에 대한 초기 CurrentVa를 가져올 수 있습니다. 그러나 반환되는 값은 유효한 가상 주소가 아닌 Mdl에 대한 인덱스입니다. 드라이버가 큰 전송 요청을 둘 이상의 DMA 작업으로 분할해야 하는 경우 각 DMA 작업에 대해 CurrentVaLength 를 업데이트해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000부터 사용할 수 있습니다.
대상 플랫폼 데스크톱
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 IrqlDispatch(wdm)

추가 정보

AllocateAdapterChannel

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

KeFlushIoBuffers

MapTransfer

MmGetMdlVirtualAddress