다음을 통해 공유


WdfDmaTransactionCancel 함수(wdfdmatransaction.h)

[KMDF에만 적용]

WdfDmaTransactionCancel 메서드는 맵 레지스터 할당을 기다리는 DMA 트랜잭션을 취소하려고 시도합니다.

구문

BOOLEAN WdfDmaTransactionCancel(
  [in] WDFDMATRANSACTION DmaTransaction
);

매개 변수

[in] DmaTransaction

취소되는 트랜잭션을 나타내는 DMA 트랜잭션 개체에 대한 핸들입니다. 이 트랜잭션은 드라이버에 의해 이미 초기화되어 있어야 합니다.

반환 값

프레임워크가 맵 레지스터 할당을 성공적으로 취소하면 WdfDmaTransactionCancel은 TRUE를 반환합니다. 이 경우 전송이 완료되지 않으며 프레임워크는 트랜잭션이 다시 시작될 때까지 트랜잭션에 대한 추가 DMA 콜백을 수행하지 않습니다.

메서드는 다른 스레드가 이미 이 트랜잭션을 처리하고 있거나 드라이버가 아직 WdfDmaTransactionExecute를 호출하지 않은 경우 FALSE를 반환합니다. 첫 번째 경우 프레임워크는 현재 를 호출하거나 EvtProgramDma 또는 EvtReserveDma를 호출합니다. 이 시점에서 시스템 모드 DMA 프로필을 지정한 드라이버는 WdfDmaTransactionStopSystemTransfer를 호출할 수 있습니다.

또한 메서드는 DMA 버전 2 사용자에서 할당된 트랜잭션을 사용하여 호출된 경우 FALSE를 반환합니다.

설명

드라이버는 WdfRequestMarkCancelableEx 호출에서 제공하는 EvtRequestCancel 이벤트 콜백 함수에서 WdfDmaTransactionCancel을 호출할 수 있습니다. 이 작업을 수행하는 방법을 보여 주는 코드 예제는 WdfDmaTransactionStopSystemTransfer를 참조하세요.

드라이버는 EvtIoCanceledOnQueue 이벤트 콜백 함수에서 WdfDmaTransactionCancel을 호출할 수도 있습니다.

WdfDmaTransactionExecute 호출 후 WdfDmaTransactionCancel에 대한 호출이 발생하지만 WdfDmaTransactionExecute 메서드가 DMA 할당을 시작하기 전에만 취소가 성공할 수 있습니다. 자세한 내용은 DMA 트랜잭션 취소를 참조하세요.

드라이버는 WdfDmaTransactionInitialize를 호출한 후 WdfDmaTransactionCancel을 호출해야 하지만 WdfDmaTransactionRelease 또는 WdfObjectDelete를 호출하여 트랜잭션 개체를 삭제해야 합니다.

프레임워크가 EvtProgramDma 또는 EvtReserveDma를 호출한 후에는 WdfDmaTransactionCancel을 호출하지 마세요.

드라이버는 WdfDmaTransactionCancel을 호출하기 전에 DMA 버전 3 사용을 요청해야 합니다. DMA 버전 3을 선택하려면 WDF_DMA_ENABLER_CONFIG WdmDmaVersionOverride 멤버를 3으로 설정합니다.

드라이버가 DMA 버전 2 인에이블러에서 할당된 트랜잭션에서 WdfDmaTransactionCancel 을 호출하면 프레임워크는 검증 도구 오류를 생성하고 WdfDmaTransactionCancel 은 FALSE를 반환합니다. 이 경우 트랜잭션을 취소하려고 시도하지 않습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8
대상 플랫폼 유니버설
최소 KMDF 버전 1.11
머리글 wdfdmatransaction.h(Wdf.h 포함)
라이브러리 Wdf01000.sys(프레임워크 라이브러리 버전 관리 참조)
IRQL <=DISPATCH_LEVEL
DDI 규정 준수 규칙 DriverCreate(kmdf)

추가 정보

EvtProgramDma

EvtReserveDma

WdfDmaTransactionStopSystemTransfer