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) |