Programming/윈도우 드라이버(14)
-
PS/2 Mouse Filter 드라이버
WPF 책을 독파하고 난 후, DDK에 있는 Mouse Filter 드라이버 코드를 분석하기 시작했다.일단은 Mouse Filter 드라이버가 삽입되어야 할 위치를 알아야 하고, 어떤 IRP를 가로채야 하는지 등에 대해 알아야 하기 때문에 PS/2 마우스 드라이버의 스택 구조를 알 필요가 있었다. Mouclass Filter (FIDO Driver - Class upper Filter Driver) I8042prt Driver (FDO Driver) ACPI Bus Driver (PDO Driver) PS/2 마우스 드라이버의 스택 구조는 위의 그림과 같이 하위의 ACPI Bus Driver(PDO), 기능 드라이버 역할의 I8042prt Driver(FDO), 그리고 맨 상위에 Mouclass Filt..
2013.01.04 -
디바이스 오브젝트란?
OS는 디바이스 오브젝트에 의해서 디바이스들을 나타낸다. 하나 또는 그 이상의 디바이스 오브젝트들은 각각의 디바이스와 관련되어 있다. 디바이스 오브젝트는 디바이스 상의 모든 동작의 타겟 역할을 한다. 커널 모드 드라이버들은 다음의 경우를 제외하고 각각의 디바이스를 위해 반드시 적어도 하나 이상의 디바이스 오브젝트를 생성해야 한다. - 클래스 혹은 포트 드라이버와 연관되어 있는 미니드라이버들은 그들 자신의 디바이스 오브젝트들을 생성하지 않는다. 클래스 혹은 포트 드라이버는 디바이스 오브젝트를 생성하고, 미니드라이버에게 동작을 디스패치 한다. - NDIS 미니포트 드라이버와 같이 드라이버 타입이 명시된 하부시스템의 일부로 동작하는 드라이버들은 하부시스템에 의해 그들 디바이스 오브젝트가 생성된다. 만약 드라이..
2013.01.04 -
Io Request 처리하기
드라이버가 I/O reqeust를 수신하였을 때, 다음과 같은 동작을 한다.1. request를 다른 queue로 Requeue 한다.2. request를 완료한다.3. request를 취소한다.4. I/O target 드라이버로 request를 전송한다. 드라이버는 request를 무시하거나 삭제할 수 없다. Requeuing I/O Requests 드라이버는 I/O queue로부터 수신한 I/O requests를 requeue 할 수 있다. 또한 버스 드라이버는 자식 디바이스의 I/O queue로부터 부모 디바이스의 I/O queue로 I.O request를 requeue할 수 있다. I/O Request를 다른 I/O Queue에 Requeuing 하기 - 드라이버의 request 핸들러가 I/O ..
2013.01.04 -
Request 처리하기
만약 드라이버가 I/O queue에 대한 순차적 dispatching 혹은 병렬 dispatching을 명시했다면 프레임워크는 queue에 있는 request가 드라이버로 전달될 준비가 되었을 때마다 드라이버가 제공하는 callback 함수를 호출한다.드라이버는 하나 또는 그 이상의 request를 수신하는 callback 함수를 제공할 수 있다. - EvtIoRead 프레임워크는 queue에 있는 read request가 이용가능할 때 I/O queue의 EvtIoRead callback 함수를 호출한다. - EvtIoWrite 프레임워크는 queue에 있는 write request가 이용가능할 때 I/O queue의 EvtIoWrite callback 함수를 호출한다. - EvtIoDeviceCont..
2013.01.04 -
Io Queue 생성하기
대부분의 드라이버들은 EvtDriverDeviceAdd callback 함수에서 I/O queue를 생성한다.I/O queue를 생성하기 위해서 드라이버는 Framework queue 오브젝트를 생성하는 WdfIoQueueCreate를 호출해야 한다.드라이버에서는 WDF_IO_QUEUE_CONFIG 구조체를 함수에게 제공하며, 이 구조체 내에는 queue에 관한 구성 정보가 포함되어 있다. 예를 들면, queue의 dispatching 방법이든지, queue 내에 있는 request가 이용가능하게 되었을 때, 프레임워크가 호출할 수 있는 request의 포인터 등이다. 구조체는 또한 queue가 power-managed인지 아닌지, 드라이버가 request의 zero-length 버퍼를 지원 하는지 안하..
2013.01.04 -
Io Callback Function
EvtIoInternalDeviceControl - 내부 디바이스 I/O control code에 포함되어 있는 I/O request를 처리하는 함수. - 이 함수를 사용할 때는 반드시 EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL 타입을 사용함으로써 함수를 선언해야 한다. - 드라이버는 WdfIoQueueCreate 가 호출될 때 EvtIoDeviceControl callback 함수를 등록한다. 만약 드라이버가 EvtIoDeviceControl callback 함수를 등록하였다면, callback 함수는 모든 I/O control request(IRP_MJ_DEVICE_CONTROL)를 수신할 것이다. - EvtIoDeviceControl callback 함수는 각각의 수신된 I/O ..
2013.01.04