[KMDF에만 적용]
WdfDmaTransactionSetDeviceAddressOffset 메서드는 DMA 작업을 수행할 때 시스템 DMA 컨트롤러가 액세스할 레지스터의 오프셋을 지정합니다.
구문론
void WdfDmaTransactionSetDeviceAddressOffset(
[in] WDFDMATRANSACTION DmaTransaction,
[in] ULONG Offset
);
매개 변수
[in] DmaTransaction
수정할 트랜잭션을 지정하는 DMA 트랜잭션 개체에 대한 핸들입니다.
[in] Offset
WDF_DMA_SYSTEM_PROFILE_CONFIG지정된 DeviceAddress DMA가 수행되어야 하는 레지스터의 오프셋입니다.
반환 값
없음
비고
WdfDmaTransactionSetDeviceAddressOffset 시스템 모드 DMA 프로필을 지정하는 DMA 인에이블러와 함께 사용해야 합니다.
프레임워크 기반 드라이버는 DMA 트랜잭션을 초기화한 후 실행하기 전에 WdfDmaTransactionSetDeviceAddressOffset 호출합니다.
드라이버는 이 방법을 사용하여 디바이스의 레지스터 파일 내에서 여러 레지스터에 액세스할 수 있습니다.
예를 들어 드라이버는 DMA를 사용하여 디바이스의 레지스터 파일에서 별도의 읽기 및 쓰기 레지스터에 액세스할 수 있습니다.
이렇게 하려면 드라이버가 인에이블러를 구성할 때 디바이스의 레지스터 파일의 기본 주소를 지정한 다음 트랜잭션을 실행하기 전에 필요에 따라 읽기 또는 쓰기 레지스터의 오프셋을 설정합니다.
드라이버가 Windows 8 이전 운영 체제에서 이 메서드를 호출하는 경우 프레임워크의 검증 도구 오류를 보고합니다.
예시
다음 코드 예제에서는 DMA 트랜잭션을 초기화합니다. 그런 다음 시스템 DMA 컨트롤러가 액세스할 레지스터의 오프셋을 설정하고, 전송 완료 콜백 루틴을 제공하고, DMA 트랜잭션을 실행합니다.
status = WdfDmaTransactionInitialize(
RequestContext->DmaTransaction,
EvtProgramDma,
direction,
mdl,
startingVa,
length
);
if(!NT_SUCCESS(status)) {
goto Complete;
}
WdfDmaTransactionSetDeviceAddressOffset(
RequestContext->DmaTransaction,
READ_DATA_REGISTER_OFFSET
);
WdfDmaTransactionSetTransferCompleteCallback(
RequestContext->DmaTransaction,
EvtDmaTransactionDmaTransferComplete,
RequestContext
);
status = WdfDmaTransactionExecute(
RequestContext->DmaTransaction,
RequestContext );
if(!NT_SUCCESS(status)) {
goto Complete;
}
return status;
Complete:
WdfDmaTransactionRelease(
RequestContext->DmaTransaction
);
요구 사항
요구 사항 | 가치 |
---|---|
지원되는 최소 클라이언트 | Windows 8 |
대상 플랫폼 | 보편적 |
최소 KMDF 버전 | 1.11 |
헤더 | wdfdmatransaction.h(Wdf.h 포함) |
라이브러리 | Wdf01000.sys(프레임워크 라이브러리 버전 관리 참조) |
IRQL | <=DISPATCH_LEVEL |
DDI 규정 준수 규칙 | DriverCreate(kmdf) |