WdfDmaEnablerCreate 함수(wdfdmaenabler.h)
[KMDF에만 적용]
WdfDmaEnablerCreate 메서드는 DMA 인에이블러 개체를 만듭니다.
구문
NTSTATUS WdfDmaEnablerCreate(
[in] WDFDEVICE Device,
[in] PWDF_DMA_ENABLER_CONFIG Config,
[in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
[out] WDFDMAENABLER *DmaEnablerHandle
);
매개 변수
[in] Device
프레임워크 디바이스 개체에 대한 핸들입니다.
[in] Config
WDF_DMA_ENABLER_CONFIG 구조체에 대한 포인터입니다. 드라이버는 WDF_DMA_ENABLER_CONFIG_INIT 호출하여 이 구조를 초기화해야 합니다.
[in, optional] Attributes
새 DMA 인에이블러 개체의 개체 특성을 지정하는 WDF_OBJECT_ATTRIBUTES 구조체에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 WDF_NO_OBJECT_ATTRIBUTES 수 있습니다.
[out] DmaEnablerHandle
새 DMA 인에이블러 개체에 대한 핸들입니다.
반환 값
WdfDmaEnablerCreate 는 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 메서드는 다음 값 중 하나를 반환할 수 있습니다.
반환 코드 | 설명 |
---|---|
|
잘못된 매개 변수가 감지되었습니다. |
|
새 DMA 인에이블러 개체를 생성할 메모리가 부족했습니다. |
|
WDF_DMA_ENABLER_CONFIG 구조체의 크기가 잘못되었습니다. |
|
드라이버는 Windows 8 이전 운영 체제에서 DMA 버전 3을 요청했습니다. |
WdfDmaEnablerCreate 메서드가 반환할 수 있는 다른 반환 값 목록은 프레임워크 개체 만들기 오류를 참조하세요.
이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.
드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.
설명
프레임워크 기반 드라이버는 디바이스에 대한 DMA 트랜잭션을 만들기 전에 WdfDmaEnablerCreate 를 호출해야 합니다.
드라이버가 WdfDmaEnablerCreate를 호출하기 전에 WdfDeviceSetAlignmentRequirement를 호출해야 합니다.
WdfDmaEnablerCreate의 Device 매개 변수가 지정하는 프레임워크 디바이스 개체는 항상 새 DMA 인에이블러 개체의 부모 개체가 됩니다. 드라이버가 WDF_OBJECT_ATTRIBUTES 구조체의 ParentObject 멤버에서 다른 부모를 지정하는 경우 프레임워크는 이 값을 무시합니다. 프레임워크는 부모 개체를 삭제할 때 DMA 인에이블러 개체를 삭제합니다.
시스템 모드 DMA 프로필을 요청하는 Config 매개 변수를 사용하여 호출되는 경우 WdfDmaEnablerCreate 는 부분적으로 초기화된 DMA 인에이블러를 만듭니다. 드라이버는 이후에 WdfDmaEnablerConfigureSystemProfile 을 호출하여 기본 채널에 대한 DMA 설정을 설정해야 합니다.
DMA 인에이블러 개체 및 WdfDmaEnablerCreate에 대한 자세한 내용은 DMA 트랜잭션 사용을 참조하세요.
예제
다음 코드 예제는 PLX9x5x 샘플 드라이버에서 가져옵니다. 다음은 버퍼 맞춤에 대한 디바이스 요구 사항을 설정하고, WDF_DMA_ENABLER_CONFIG 구조를 초기화하고, WdfDmaEnablerCreate를 호출하는 예제입니다.
//
// PLx PCI9656 DMA_TRANSFER_ELEMENTS must be 16-byte aligned.
//
WdfDeviceSetAlignmentRequirement(
DevExt->WdfDevice,
PCI9656_DTE_ALIGNMENT_16
);
//
// Create a new DMA enabler object instance.
// Use scatter/gather, 64-bit addresses, and duplex-type profile.
//
{
WDF_DMA_ENABLER_CONFIG dmaConfig;
WDF_DMA_ENABLER_CONFIG_INIT(
&dmaConfig,
WdfDmaProfileScatterGather64Duplex,
DevExt->MaximumTransferLength
);
status = WdfDmaEnablerCreate(
DevExt->WdfDevice,
&dmaConfig,
WDF_NO_OBJECT_ATTRIBUTES,
&DevExt->DmaEnabler
);
if (!NT_SUCCESS (status)) {
// Cannot continue, so release device resources.
return status;
}
}
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
최소 KMDF 버전 | 1.0 |
머리글 | wdfdmaenabler.h(Wdf.h 포함) |
라이브러리 | Wdf01000.sys(프레임워크 라이브러리 버전 관리 참조) |
IRQL | PASSIVE_LEVEL |
DDI 규정 준수 규칙 | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |