다음을 통해 공유


DMA_COMPLETION_ROUTINE 콜백 함수(wdm.h)

DmaCompletionRoutine 콜백 루틴은 이전에 시스템 DMA 전송을 요청한 드라이버에 이 전송이 완료되었다는 것을 알릴 수 있습니다.

구문

DMA_COMPLETION_ROUTINE DmaCompletionRoutine;

void DmaCompletionRoutine(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PVOID CompletionContext,
  [in] DMA_COMPLETION_STATUS Status
)
{...}

매개 변수

[in] DmaAdapter

DMA_ADAPTER 구조체에 대한 포인터입니다. 이 구조체는 드라이버의 시스템 DMA 채널을 나타내는 어댑터 개체입니다.

[in] DeviceObject

DEVICE_OBJECT 구조체에 대한 포인터입니다. 이 구조는 요청된 DMA 작업의 대상 디바이스를 나타내는 PDO(물리적 디바이스 개체)입니다.

[in] CompletionContext

DmaCompletionRoutine 루틴에 대한 드라이버 결정 컨텍스트에 대한 포인터입니다. 이 컨텍스트는 드라이버가 이전에 시스템 DMA 전송을 시작한 MapTransferEx 호출에 전달한 CompletionContext 매개 변수 값입니다.

[in] Status

DMA 전송의 완료 상태. 이 매개 변수는 DMA 전송이 성공적으로 완료되었는지 여부를 나타내는 DMA_COMPLETION_STATUS 열거형 값입니다.

반환 값

없음

설명

옵션으로 드라이버는 DmaCompletionRoutine 루틴을 구현할 수 있습니다. 드라이버가 시스템 DMA 전송을 요청하면 드라이버는 요청과 함께 이 루틴에 대한 포인터를 제공할 수 있습니다. DMA 전송이 완료되면 드라이버에 알리기 위해 DmaCompletionRoutine 루틴이 자동으로 호출됩니다.

드라이버의 DmaCompletionRoutine 루틴은 드라이버에서 요청한 DMA 전송이 DMA 전송이 완료된 후 인터럽트를 생성할 수 있는 시스템 DMA 컨트롤러를 사용하는 경우에만 호출됩니다. 버스 master DMA 디바이스를 사용하거나 인터럽트 생성하지 않는 시스템 DMA 컨트롤러를 사용하는 드라이버는 다른 방법을 사용하여 DMA 전송이 완료되는 시기를 결정해야 합니다. 예를 들어 이 드라이버는 타이머 인터럽트 를 사용하여 DMA 전송의 상태 주기적으로 폴링할 수 있습니다.

드라이버는 MapTransferEx 루틴에 대한 선택적 매개 변수로 DmaCompletionRoutine 루틴에 대한 포인터를 제공할 수 있습니다.

예제

DmaCompletionRoutine 콜백 루틴을 정의하려면 먼저 정의하려는 콜백 루틴의 유형을 식별하는 함수 선언을 제공해야 합니다. Windows는 드라이버에 대한 콜백 함수 형식 집합을 제공합니다. 콜백 함수 형식을 사용하여 함수를 선언하면 드라이버에 대한 코드 분석, SDV( 정적 드라이버 검증 도구 ) 및 기타 확인 도구에서 오류를 찾을 수 있으며 Windows 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.

예를 들어 라는 MyDmaCompletionRoutineDmaCompletionRoutine 콜백 루틴을 정의하려면 다음 코드 예제와 같이 DMA_COMPLETION_ROUTINE 형식을 사용합니다.

DMA_COMPLETION_ROUTINE MyDmaCompletionRoutine;

그런 다음 다음과 같이 콜백 루틴을 구현합니다.

_Use_decl_annotations_
VOID
  MyDmaCompletionRoutine(
    PDMA_ADAPTER DmaAdapter,
    PDEVICE_OBJECT DeviceObject,
    PVOID CompletionContext,
    DMA_COMPLETION_STATUS Status
    )
  {
      // Function body
  }

DMA_COMPLETION_ROUTINE 함수 형식은 Wdm.h 헤더 파일에 정의되어 있습니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 _Use_decl_annotations_ 주석을 추가해야 합니다. 주석을 _Use_decl_annotations_ 사용하면 헤더 파일의 DMA_COMPLETION_ROUTINE 함수 형식에 적용되는 주석이 사용됩니다. 함수 선언에 대한 요구 사항에 대한 자세한 내용은 WDM 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조하세요. _Use_decl_annotations_ 대한 자세한 내용은 함수 동작 주석 지정을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8 시작해서 사용할 수 있습니다.
대상 플랫폼 데스크톱
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
IRQL DISPATCH_LEVEL 호출합니다.

추가 정보

BuildScatterGatherListEx

DEVICE_OBJECT

DMA_ADAPTER

DMA_COMPLETION_STATUS

DMA_OPERATIONS

GetScatterGatherListEx

MapTransferEx