2013. 1. 4. 09:54ㆍProgramming/윈도우 드라이버
WdfFdoInitSetFilter
- 프레임워크에게 디바이스 오브젝트가 필터 드라이버임을 알리기 위한 함수.
- 필터 드라이버는 전형적으로 몇몇의 I/O Request를 처리하며, 대부분의 Request는 다음
드라이버로 전송하는 역할을 한다.
- 그런데 만약 프레임워크가 어떤 Request를 수신하였고 드라이버는 해당하는 Request type과
일치하는 I/O queue를 생성하지 않았을 경우, 프레임워크의 처리 방법은 WdfFdoInitSetFilter를
호출했느냐 아니냐에 따라 달라지게 된다.
- 만약 드라이버가 WdfFdoInitSetFilter를 호출했다면, 드라이버 프레임 워크는 Request를
다음 드라이버로 보낸다. - 만약 드라이버가 WdfFdoInitSetFilter를 호출하지 않았다면, 프레임워크는
STATUS_INVALID_DEVICE_REQUEST라는 상태 값과 함께 Request를 완료한다.
- IRQL : PASSIVE_LEVEL
WdfDeviceInitSetDeviceType
- 특정한 디바이스로 디바이스 타입을 설정하기 위한 함수.
- 만약 드라이버가 WdfDeviceInitSetDeviceType을 호출한다면, 이는 WdfDeviceCreate 전에
일어나야 한다.
- 드라이버가 명시하는 디바이스 타입은 드라이버가 I/O request를 완료할 때 프레임워크가
사용하는 디폴트 우선권의 값을 결정한다.
- IRQL : <= DISPATCH_LEVEL
WdfDeviceCreate
- 프레임워크 디바이스 오브젝트를 생성하는 함수.
- WdfDeviceCreate를 호출하기 전에, 드라이버는 WDFDEVICE_INIT 구조체를 초기화하는 함수를
호출해야 한다.
- 만약 드라이버가 초기화하는 함수를 호출하는 과정에서 에러가 발생한다면, WdfDeviceCreate
함수는 호출될 수 없다.
- 이 경우, 드라이버는 WdfDeviceInitFree를 호출해야 한다.
- WdfDeviceCreate는 기능 디바이스 오브젝트(FDO) 또는 물리 디바이스 오브젝트(PDO)로
대표되는 프레임워크 디바이스 오브젝트를 생성한다.
- 함수가 생성하는 디바이스 오브젝트의 타입은 드라이버가 WDFDEVICE_INIT 구조체를 어떻게
얻었느냐에 따라 결정된다.
- 만약 드라이버가 EvtDriverDeviceAdd 콜백으로부터 WDFDEVICE_INIT 구조체를
수신하였다면, WdfDeviceCreate는 FDO를 생성한다. - 만약 드라이버가 EvtChildListCreateDevice 콜백 혹은 WdfPdoInitAllocate를 호출함으로써
WDFDEVICE_INIT 구조체를 수신하였다면, WdfDeviceCreate는 PDO를 생성한다.
- 드라이버가 WdfDeviceCreate를 호출한 이후에는 더 이상 WDFDEVICE_INIT 구조체에 접근할
필요가 없다.
- 프레임워크를 사용하는 미니포트 드라이버는 반드시 WdfDeviceCreate 대신에
WdfDeviceMiniportCreate를 호출해야 한다.
- 각 프레임워크 디바이스 오브젝트의 부모는 드라이버의 프레임워크 드라이버 오브젝트이다.
- 드라이버는 부모를 변경할 수 없으며, WDF_OBJECT_ATTRIBUTES 구조체의 ParentObject는
반드시 NULL이어야 한다.
- Pnp 관리자가 디바이스가 제거되었음을 통보할 때 프레임워크는 각각의 프레임워크 디바이스
오브젝트(몇몇의 컨트롤 디바이스 오브젝트는 제외)를 제거한다.
- 만약 드라이버가 EvtCleanupCallback 또는 EvtDestroyCallback을 제공한다면, 프레임워크는 이
함수들을 IRQL이 PASSIVE_LEVEL일 때 호출해야 한다.
- IRQL : PASSIVE_LEVEL