함수 드라이버에서 디바이스 개체 만들기
각 함수 드라이버는 시스템에 있는 지원되는 각 디바이스에 대한 프레임워크 디바이스 개체를 만듭니다. 이러한 디바이스 개체는 함수 드라이버에 의해 만들어지므로 FDO(기능 디바이스 개체)라고 합니다. 각 FDO는 디바이스에 대한 함수 드라이버의 표현입니다.
함수 드라이버는 프레임워크가 드라이버의 EvtDriverDeviceAdd 콜백 함수를 호출할 때마다 프레임워크 디바이스 개체를 만들어야 합니다. 프레임워크는 이 콜백 함수를 호출하여 지원되는 디바이스 중 하나가 시스템에 있음을 드라이버에 알릴 수 있습니다.
드라이버의 EvtDriverDeviceAdd 콜백 함수는 WDFDEVICE_INIT 구조체에 대한 포인터를 받습니다. 드라이버는 WDFDEVICE_INIT 구조에 정보를 저장하는 프레임워크 디바이스 개체 초기화 메서드 집합을 호출할 수 있습니다. 또한 함수 드라이버는 프레임워크 FDO 초기화 메서드를 호출할 수 있습니다.
함수 드라이버에서 프레임워크 디바이스 개체를 만드는 데는 일반적으로 다음 단계가 포함됩니다.
PnP, 전원 및 전원 정책 콜백 함수를 등록합니다.
대부분의 함수 드라이버는 WdfDeviceInitSetPnpPowerEventCallbacks 를 호출하여 PnP 및 전원 콜백 함수를 등록합니다. 이러한 콜백 함수에 대한 자세한 내용은 함수 드라이버에서 PnP 및 전원 관리 지원을 참조하세요.
디바이스가 저전력 유휴를 지원하거나 절전 모드 해제 기능이 있는 경우 함수 드라이버는 일반적으로 WdfDeviceInitSetPowerPolicyEventCallbacks 를 호출하여 전원 정책 콜백 함수를 등록합니다. 이러한 콜백 함수에 대한 자세한 내용은 전원 정책 소유권을 참조하세요.
함수 드라이버별 콜백 함수 등록
일부 함수 드라이버는 디바이스에 필요한 시스템 하드웨어 리소스 지정에 참여해야 하는 경우 WdfFdoInitSetEventCallbacks를 호출합니다. 하드웨어 리소스에 대한 자세한 내용은 Framework-Based 드라이버용 하드웨어 리소스를 참조하세요.
파일 이벤트 콜백 함수 등록
애플리케이션이 디바이스에서 파일을 열거나 닫을 때 드라이버가 응답해야 하는 경우 드라이버는 WdfDeviceInitSetFileObjectConfig 를 호출하여 프레임워크 파일 개체에 대한 콜백 함수를 등록해야 합니다. 자세한 내용은 프레임워크 파일 개체 사용을 참조하세요.
I/O 요청 특성 설정
드라이버가 프레임워크 큐 개체에서 I/O 요청을 수신하는 경우 드라이버는 WdfDeviceInitSetRequestAttributes 를 호출하여 프레임워크가 디바이스의 요청 개체에 할당할 컨텍스트 메모리를 설정할 수 있습니다. 자세한 내용은 요청 개체 컨텍스트 사용을 참조하세요.
디바이스 특성 설정
일반적으로 함수 드라이버는 다음 방법 중 일부를 호출하여 디바이스의 특성을 지정합니다.
- WdfDeviceInitSetDeviceType- 드라이버가 지원하는 하드웨어 유형을 식별합니다.
- WdfDeviceInitSetIoType- 드라이버가 애플리케이션의 I/O 요청을 처리하는 경우 데이터 버퍼에 액세스하는 방법을 식별합니다.
- WdfDeviceInitSetCharacteristics - 디바이스가 읽기 전용인지 또는 이동식 미디어를 지원하는지와 같은 디바이스 특성을 설정합니다.
- WdfDeviceInitSetExclusive( 디바이스에 한 번에 하나의 애플리케이션에서 단독 액세스가 필요한 경우).
- WdfDeviceInitSetPowerInrush( 저전력 상태에서 작동(D0) 상태로 전환할 때 디바이스에 현재 인러시가 필요한 경우.
- WdfDeviceInitSetPowerPageable 또는 WdfDeviceInitSetPowerNotPageable - 시스템이 절전 모드 상태와 작업(S0) 상태 간에 전환되는 동안 드라이버가 페이징 가능한 데이터에 액세스해야 하는지 여부를 나타냅니다.
- WdfDeviceInitAssignName - 디바이스 개체에 이름을 할당합니다.
- WdfDeviceInitAssignSDDLString - 디바이스 개체에 보안 설명자를 할당합니다.
- WdfDeviceInitSetDeviceClass- 디바이스의 설정 클래스를 식별합니다.
디바이스 속성을 가져옵니다.
경우에 따라 함수 드라이버는 디바이스 버스용 드라이버 또는 다른 하위 수준 드라이버가 설정한 디바이스 속성에 대한 정보를 가져와야 합니다. 드라이버는 WdfFdoInitQueryProperty 또는 WdfFdoInitAllocAndQueryProperty 를 호출하여 이 정보를 가져올 수 있습니다. Windows 8.1 이상을 대상으로 하는 새 드라이버는 WdfFdoInitQueryPropertyEx 및 WdfFdoInitAllocAndQueryPropertyEx를 호출할 수 있습니다.
디바이스의 레지스트리 키에 액세스합니다.
일부 함수 드라이버는 다른 드라이버, 사용자 또는 설치 패키지가 레지스트리에 배치한 디바이스 또는 드라이버에 대한 정보를 가져와야 합니다. 드라이버는 WdfFdoInitOpenRegistryKey 를 호출하여 디바이스 또는 드라이버의 레지스트리 키를 열 수 있습니다. 자세한 내용은 Framework-Based 드라이버에서 레지스트리 사용을 참조하세요.
동적 열거에 사용할 기본 자식 목록 구성을 만듭니다.
버스에 대한 함수 드라이버를 작성하고 드라이버가 버스에 연결된 자식 디바이스의 동적 열거를 수행하는 경우 드라이버는 WdfFdoInitSetDefaultChildListConfig를 호출해야 합니다. 자세한 내용은 버스에서 디바이스 열거를 참조하세요.
디바이스 개체 만들기
디바이스 개체를 만드는 마지막 단계는 WdfDeviceCreate를 호출하는 것입니다.