WDF를 사용하여 드라이버 개발
이 항목에서는 KMDF(Kernel-Mode Driver Framework) 드라이버를 개발하는 데 사용할 프레임워크 개체에 대한 개략적인 개요를 제공합니다. 표시된 경우를 제외하고 동일한 개체를 사용하여 UMDF 버전 2부터 User-Mode 드라이버 프레임워크(UMDF) 드라이버를 개발합니다.
WDF(Windows 드라이버 프레임워크) 드라이버는 DriverEntry 루틴 과 프레임워크 기반 드라이버에서 사용하는 Windows Driver Framework 개체 에 의해 정의된 이벤트 콜백 함수 집합으로 구성됩니다. 콜백 함수는 프레임워크에서 내보내는 개체 메서드를 호출합니다. WDK(Windows 드라이버 키트)에는 드라이버의 이벤트 콜백 함수를 구현하는 방법을 보여 주는 샘플 WDF 드라이버가 포함되어 있습니다. Windows 개발자 센터 - 하드웨어에서 이러한 샘플을 다운로드할 수 있습니다. 사용할 수 있는 샘플에 대한 자세한 내용은 샘플 KMDF 드라이버 및 샘플 UMDF 드라이버를 참조하세요.
WDF 드라이버를 만들 때 일반적으로 다음을 수행합니다.
프레임워크 드라이버 개체를 사용하여 드라이버를 나타냅니다.
드라이버의 DriverEntry 루틴 은 WdfDriverCreate 를 호출하여 드라이버를 나타내는 프레임워크 드라이버 개체를 만들어야 합니다. WdfDriverCreate 메서드는 또한 드라이버의 EvtDriverDeviceAdd 콜백 함수를 등록합니다. 이 콜백 함수는 pnP(플러그 앤 플레이) 관리자가 드라이버가 지원하는 디바이스의 존재를 보고할 때마다 프레임워크에서 호출합니다.
프레임워크 디바이스 개체를 사용하여 드라이버에서 PnP 및 전원 관리를 지원합니다.
모든 드라이버는 WdfDeviceCreate 를 호출하여 드라이버가 지원하는 각 디바이스에 대한 프레임워크 디바이스 개체를 만들어야 합니다. 디바이스는 컴퓨터에 연결된 하드웨어의 일부이거나 소프트웨어 전용 디바이스일 수 있습니다. 프레임워크 디바이스 개체는 PnP 및 전원 관리 작업을 지원하며, 드라이버는 디바이스가 작동 상태로 들어오거나 떠날 때 드라이버에 알리는 이벤트 콜백 함수를 등록할 수 있습니다.
프레임워크 디바이스 개체에 대한 자세한 내용은 드라이버에서 PnP 및 전원 관리 지원을 참조하세요.
프레임워크 큐 개체 및 프레임워크 요청 개체를 사용하여 드라이버에서 I/O 작업을 지원합니다.
애플리케이션 또는 다른 드라이버에서 읽기, 쓰기 또는 디바이스 I/O 제어 요청을 수신하는 모든 드라이버는 WdfIoQueueCreate 를 호출하여 I/O 큐를 나타내는 프레임워크 큐 개체를 만들어야 합니다. 일반적으로 드라이버는 각 I/O 큐에 대해 하나 이상의 요청 처리기를 등록합니다 . I/O 관리자가 드라이버에 I/O 요청을 보낼 때 프레임워크는 요청에 대한 프레임워크 요청 개체를 만들고, 요청 개체를 I/O 큐에 배치하고, 드라이버의 요청 처리기 중 하나를 호출하여 드라이버에 요청을 사용할 수 있음을 알릴 수 있습니다. 드라이버는 I/O 요청을 가져오고 요청을 다시 큐에 넣기, 완료, 취소 또는 전달할 수 있습니다.
프레임워크의 큐 개체 및 요청 개체 사용에 대한 자세한 내용은 프레임워크 큐 개체 및 프레임워크 요청 개체를 참조하세요.
프레임워크 인터럽트 개체를 사용하여 디바이스 인터럽트 처리
디바이스 인터럽트를 처리하는 드라이버는 WdfInterruptCreate 를 호출하여 각 인터럽트에 대한 프레임워크 인터럽트 개체를 만들고 콜백 함수를 등록해야 합니다. 이러한 콜백 함수는 인터럽트 사용 및 비활성화 및 인터럽트 서비스 루틴(ISR) 및 인터럽트 DPC(지연 프로시저 호출)의 역할을 합니다.
프레임워크 인터럽트 개체에 대한 자세한 내용은 하드웨어 인터럽트 처리를 참조하세요.
KMDF 드라이버는 프레임워크의 DMA 인에이블러 개체 및 DMA 트랜잭션 개체 를 사용하여 디바이스의 DMA(직접 메모리 액세스) 작업을 처리할 수 있습니다.
KMDF 드라이버의 디바이스가 DMA 작업을 지원하는 경우 드라이버는 WdfDmaEnablerCreate 를 호출하여 DMA 인에이블러 개체를 만들고 WdfDmaTransactionCreate 를 호출하여 하나 이상의 DMA 트랜잭션 개체를 만들어야 합니다. DMA 트랜잭션 개체는 디바이스 하드웨어가 DMA 작업을 수행하도록 프로그래밍하는 EvtProgramDma 콜백 함수를 정의합니다.
DMA 작업을 지원하는 방법에 대한 자세한 내용은 프레임워크 기반 드라이버에서 DMA 작업 처리를 참조하세요.
프레임워크의 I/O 대상 개체 를 사용하여 I/O 요청을 다른 드라이버에 보냅니다.
I/O 요청을 다른 드라이버(일반적으로 드라이버 스택의 다음 하위 드라이버)에 전달하려면 드라이버가 I/O 대상 개체로 요청을 보냅니다.
I/O 대상 개체에 대한 자세한 내용은 I/O 대상 사용을 참조하세요.
KMDF 드라이버는 프레임워크의 WMI 공급자 개체 및 WMI 인스턴스 개체를 사용하여 WMI (Windows Management Instrumentation) 기능을 지원할 수 있습니다.
대부분의 KMDF 드라이버는 WMI를 지원해야 하며 WdfWmiInstanceCreate 를 호출하여 WMI 데이터를 보내거나 받는 콜백 함수를 등록해야 합니다.
WMI에 대한 자세한 내용은 프레임워크 기반 드라이버에서 WMI 지원을 참조하세요.
프레임워크의 동기화 기능을 사용합니다.
모든 드라이버는 다중 프로세서 동기화 문제를 알고 있어야 하며 프레임워크에서 제공하는 동기화 기술을 사용해야 합니다.
프레임워크에서 제공하는 추가 개체 및 기능을 사용합니다.
프레임워크는 드라이버에서 사용할 수 있는 추가 개체를 제공합니다. 이러한 개체에 대한 자세한 내용은 WDF 지원 개체를 참조하세요.