PFLUSH_ADAPTER_BUFFERS 콜백 함수(wdm.h)
FlushAdapterBuffers 루틴은 DMA 전송 작업이 끝날 때 시스템 DMA 컨트롤러의 내부 캐시 또는 버스 마스터 어댑터의 내부 캐시에 남아 있는 모든 데이터를 플러시합니다.
통사론
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
버스 마스터 어댑터 또는 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 컨트롤러 또는 버스 마스터 어댑터의 내부 캐시에 남아 있는 데이터가 시스템 메모리 또는 디바이스로 성공적으로 플러시된 경우 TRUE 반환합니다.
발언
FlushAdapterBuffers 이름으로 직접 호출할 수 있는 시스템 루틴이 아닙니다. 이 루틴은 DMA_OPERATIONS 구조에서 반환된 주소의 포인터로만 호출할 수 있습니다. 드라이버는 IoGetDmaAdapter호출하여 이 루틴의 주소를 가져옵니다.
DMA 전송이 완료되도록 하려면 DMA 전송을 요청한 IRP를 완료하기 전과 지도 레지스터를 해제하기 전에 DMA 작업을 수행하는 모든 드라이버가 FlushAdapterBuffers 호출해야 합니다.
드라이버는 MmGetMdlVirtualAddress호출하여 패킷 기반 DMA 전송의 시작에 대한 초기 CurrentVa 가져올 수 있습니다. 그러나 반환되는 값은 유효한 가상 주소가 아닌 Mdl인덱스입니다. 드라이버가 큰 전송 요청을 둘 이상의 DMA 작업으로 분할해야 하는 경우 각 DMA 작업에 대해 CurrentVa 및 Length 업데이트해야 합니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000부터 사용할 수 있습니다. |
대상 플랫폼 | 바탕 화면 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
IRQL | <= DISPATCH_LEVEL |
DDI 규정 준수 규칙 | IrqlDispatch(wdm) |