[KMDF에만 적용]
드라이버가 DMA 디바이스에 I/O 요청을 보내기 전에 드라이버는 다음을 수행해야 합니다.
WdfDmaTransactionCreate 호출하여 요청에 대한 DMA 트랜잭션 개체를 만듭니다.
WdfDmaTransactionInitializeUsingRequest, WdfDmaTransactionInitialize또는 WdfDmaTransactionInitializeUsingOffset 호출하여 트랜잭션 개체를 초기화합니다.
일반적으로 드라이버는 요청 처리기프레임워크 요청 개체 수신하고 요청을 하드웨어에 전달해야 하므로 DMA 트랜잭션 만듭니다. 이 경우 드라이버는 요청 개체 핸들을 입력으로 수락하고 요청 개체에서 요청의 주소 매개 변수를 추출하는 WdfDmaTransactionInitializeUsingRequest호출해야 합니다.
드라이버가 받은 프레임워크 요청 개체를 기반으로 않은 DMA 트랜잭션을 만들어야 하는 경우 드라이버는 WdfDmaTransactionInitialize 호출하거나 WdfDmaTransactionInitializeUsingOffset수 있습니다. 두 메서드 모두 드라이버가 제공하는 주소 매개 변수를 허용합니다.
세 가지 초기화 메서드를 모두 입력 매개 변수로 EvtProgramDma 이벤트 콜백 함수의 주소가 필요합니다. 이 콜백 함수는 디바이스를 프로그래밍하고 프레임워크는 DMA 전송 사용할 수 있을 때마다 콜백 함수를 호출합니다.
드라이버가 WdfDmaEnablerCreate 호출하여 DMA 인에이블러 개체를 만들면 드라이버는 디바이스의 최대 전송 길이가 포함된 WDF_DMA_ENABLER_CONFIG 구조를 제공합니다. 프레임워크는 이 값을 모든 DMA 전송의 기본 최대 길이로 사용합니다.
일부 유형의 DMA 트랜잭션의 경우 디바이스의 기본 최대 길이와 다른 최대 전송 길이를 지정해야 할 수 있습니다. WdfDmaTransactionSetMaximumLength 사용하여 개별 트랜잭션에 대한 최대 전송 길이를 설정할 수 있습니다. 프레임워크는 지정된 트랜잭션을 처리하는 동안에만 지정된 최대 전송 길이를 사용합니다.
최대 전송 길이는 운영 체제가 DMA 인에이블러 개체에서 사용할 수 있도록 하는 맵 레지스터 수로 제한됩니다. 사용 가능한 최대 전송 길이를 확인하기 위해 드라이버는 WdfDmaEnablerGetFragmentLength호출할 수 있습니다. WdfDmaEnablerGetFragmentLength 반환하는 값이 WdfDmaEnablerCreate드라이버가 제공한 최대 전송 길이보다 작으면 프레임워크는 더 작은 값을 사용합니다.
드라이버가 DMA 트랜잭션을 만들고 초기화한 후, 트랜잭션 을 시작해야합니다.