PFLUSH_ADAPTER_BUFFERS_EX 콜백 함수(wdm.h)
FlushAdapterBuffersEx 루틴은 시스템 DMA 컨트롤러 또는 버스 master 디바이스에서 수행하는 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 채널 또는 버스 master 디바이스를 나타내는 어댑터 개체입니다. 호출자는 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 구조에서 반환된 주소의 포인터로만 호출할 수 있습니다 . 드라이버는 DeviceDescription 매개 변수의 Version 멤버가 DEVICE_DESCRIPTION_VERSION3 설정된 IoGetDmaAdapter를 호출하여 이 루틴의 주소를 가져옵니다. IoGetDmaAdapter가 NULL을 반환하는 경우 플랫폼에서 루틴을 사용할 수 없습니다.
FlushAdapterBuffersEx 는 하드웨어 적용 캐시 일관성(버스 스누핑)을 구현하지 않는 하드웨어 플랫폼에서 프로세서 캐시 일관성을 사용하도록 설정합니다. 또한 시스템 DMA 전송의 경우 FlushAdapterBuffersEx 는 시스템 DMA 컨트롤러의 내부 캐시에 남아 있는 모든 데이터를 플러시합니다.
분산/수집 DMA 전송을 시작하는 드라이버는 전송이 완료된 후 전송된 모든 데이터가 캐시에서 플러시되는지 확인해야 합니다. 드라이버가 DMA 전송을 요청한 IRP를 완료하고 드라이버가 맵 레지스터를 해제하기 전에 드라이버가 FlushAdapterBuffersEx 를 호출해야 합니다. 자세한 내용은 DMA 작업 중 캐시된 데이터 플러시를 참조하세요.
FlushAdapterBuffersEx 는 FlushAdapterBuffers 루틴의 확장 버전입니다. FlushAdapterBuffersEx 는 한 번의 호출로 전체 분산/수집 목록을 플러시할 수 있습니다. 반면 FlushAdapterBuffers 를 사용하여 분산형/수집 목록을 플러시하려면 MDL 체인의 각 MDL에 대해 별도의 호출이 필요합니다.
FlushAdapterBuffersEx 는 FlushAdapterBuffers 대신 사용하여 하나의 패킷 DMA 전송을 위해 버퍼를 플러시할 수 있습니다. 이 경우 Mdl 매개 변수가 가리키는 MDL 체인에는 MDL이 하나만 포함됩니다. 이러한 방식으로 FlushAdapterBuffersEx 를 사용하는 이점은 호출자가 MDL에 오프셋을 지정할 수 있다는 것입니다.
DMA 전송 작업이 완료되기 전에 FlushAdapterBuffersEx 가 호출되면 이 호출이 완료되기 전에 전송을 취소하거나 정의되지 않은 동작이 발생할 수 있습니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8 시작해서 사용할 수 있습니다. |
대상 플랫폼 | 데스크톱 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
IRQL | <= DISPATCH_LEVEL |