PFLUSH_ADAPTER_BUFFERS_EX 콜백 함수(wdm.h)
FlushAdapterBuffersEx 루틴은 시스템 DMA 컨트롤러 또는 버스 마스터 디바이스에서 수행하는 DMA 전송 작업이 끝날 때 데이터 캐시에 남아 있는 모든 데이터를 플러시합니다.
통사론
PFLUSH_ADAPTER_BUFFERS_EX PflushAdapterBuffersEx;
NTSTATUS PflushAdapterBuffersEx(
[in] PDMA_ADAPTER DmaAdapter,
[in] PMDL Mdl,
[in] PVOID MapRegisterBase,
[in] ULONGLONG Offset,
[in] ULONG Length,
[in] BOOLEAN WriteToDevice
)
{...}
매개 변수
[in] DmaAdapter
DMA_ADAPTER 구조체에 대한 포인터입니다. 이 구조는 드라이버의 시스템 DMA 채널 또는 버스 마스터 디바이스를 나타내는 어댑터 개체입니다. 호출자는 IoGetDmaAdapter 루틴에 대한 이전 호출에서 이 포인터를 얻었습니다.
[in] Mdl
플러시할 메모리 페이지를 설명하는 MDL 체인에 대한 포인터입니다. DMA 전송에 사용된 MDL 체인을 가리키도록 이 매개 변수를 설정합니다. 자세한 내용은 GetScatterGatherListEx, BuildScatterGatherListEx또는 mapTransferEx Mdl 매개 변수에 대한 설명을 참조하세요.
[in] MapRegisterBase
이전에 어댑터 개체에 할당된 맵 레지스터에 대한 핸들입니다.
[in] Offset
플러시 작업에 사용할 MDL 체인의 시작을 기준으로 하는 시작 오프셋입니다. 이 매개 변수를 DMA 전송의 시작 오프셋으로 사용된 값으로 설정합니다. 자세한 내용은 GetScatterGatherListEx, BuildScatterGatherListEx또는 mapTransferEx Offset 매개 변수에 대한 설명을 참조하세요.
[in] Length
플러시할 데이터의 바이트 수입니다. 이 매개 변수를 DMA 전송의 전송 길이로 사용된 값으로 설정합니다. 자세한 내용은 GetScatterGatherListEx, BuildScatterGatherListEx또는 mapTransferEx Length 매개 변수에 대한 설명을 참조하세요.
[in] WriteToDevice
DMA 전송 방향입니다. 이 매개 변수를 DMA 전송의 전송 방향으로 사용된 값으로 설정합니다. 자세한 내용은 GetScatterGatherListEx, BuildScatterGatherListEx또는 mapTransferEx WriteToDevice 매개 변수에 대한 설명을 참조하세요.
반환 값
FlushAdapterBuffersEx 호출에 성공하면 STATUS_SUCCESS 반환합니다. 가능한 오류 반환 값에는 다음 상태 코드가 포함됩니다.
반환 코드 | 묘사 |
---|---|
|
호출자가 전달한 잘못된 매개 변수 값으로 인해 루틴이 실패했습니다. |
발언
FlushAdapterBuffersEx 이름으로 직접 호출할 수 있는 시스템 루틴이 아닙니다. 이 루틴은 DMA_OPERATIONS 구조에서 반환된 주소의 포인터로만 호출할 수 있습니다. 드라이버는 DEVICE_DESCRIPTION_VERSION3 설정된 DeviceDescription 매개 변수의 Version 멤버를 사용하여 IoGetDmaAdapter 호출하여 이 루틴의 주소를 가져옵니다. IoGetDmaAdapterNULL반환하는 경우 플랫폼에서 루틴을 사용할 수 없습니다.
FlushAdapterBuffersEx 하드웨어 적용 캐시 일관성(버스 스누핑)을 구현하지 않는 하드웨어 플랫폼에서 프로세서 캐시 일관성을 사용하도록 설정합니다. 또한 시스템 DMA 전송의 경우 FlushAdapterBuffersEx 시스템 DMA 컨트롤러의 내부 캐시에 남아 있는 모든 데이터를 플러시합니다.
분산/수집 DMA 전송을 시작하는 드라이버는 전송이 완료된 후 전송된 모든 데이터가 캐시에서 플러시되는지 확인해야 합니다. 드라이버가 DMA 전송을 요청한 IRP를 완료하고 드라이버가 맵 레지스터를 해제하기 전에 드라이버가 FlushAdapterBuffersEx 호출해야 합니다. 자세한 내용은 DMA 작업 동안 캐시된 데이터 플러시참조하세요.
FlushAdapterBuffersExFlushAdapterBuffers 루틴의 확장 버전입니다. FlushAdapterBuffersEx 한 번의 호출로 전체 분산/수집 목록을 플러시할 수 있습니다. 반면, FlushAdapterBuffers 사용하여 분산/수집 목록을 플러시하려면 MDL 체인의 각 MDL에 대해 별도의 호출이 필요합니다.
FlushAdapterBuffersExFlushAdapterBuffers 대신 사용하여 하나의 패킷 DMA 전송에 대한 버퍼를 플러시할 수 있습니다. 이 경우 Mdl 매개 변수가 가리키는 MDL 체인에는 MDL이 하나만 포함됩니다. 이러한 방식으로 FlushAdapterBuffersEx 사용하면 호출자가 MDL에 대한 오프셋을 지정할 수 있다는 이점이 있습니다.
DMA 전송 작업이 완료되기 전에 FlushAdapterBuffersEx 호출되면 이 호출이 완료되기 전에 전송을 취소하거나 정의되지 않은 동작이 발생할 수 있습니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8부터 사용할 수 있습니다. |
대상 플랫폼 | 바탕 화면 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
IRQL | <= DISPATCH_LEVEL |