'미니 필터 드라이버'를 제작하는데 있어서 필요한 내용만 정리하였다.
디바이스 스택이란?
- 하나의 디바이스를 관리하기 위해 여러 드라이버가 필요하다
- 드라이버들은 디바이스를 관리하기 위해 자신의 디바이스 오브젝트 생성
- 여러 개의 디바이스 오브젝트가 스택으로 형성된다.
디바이스 스택 형성과정
- 디바이스가 연결되면, 버스드라이버가 이를 발견하고 자신의 디바이스 오브젝트를 생성한다.(버스 드라이버)
- 약속이 되어있다면, Function Driver가 그 위에 디바이스 오브젝트를 만든다. (기능 드라이버)
- 필터드라이버가 있다면 그 위에 디바이스 오브젝트를 생성한다. 필터 드라이버)
버스 드라이버란?
- 모든 디바이스에 대해 존재하며, 하드웨어와 컴퓨터 사이의 연결을 관리한다.
필터드라이버란?
- Fuinction driver가 I/O 처리하는 것을 관찰 또는 fuction driver의 작업을 변경하기 위해 제작한다.
- 기존의 드라이버가 제공하는 기능을 보완하거나 새로운 기능을 추가할 수 있는 드라이버
- 기능 드라이버 밑에 있는 것은 '하위 필터 드라이버'라고 한다.
- 기능 드라이버 위에 있는 것은 '상위 필터 드라이버' 라고 한다.
위 그림에서 알 수 있듯이 이벤트가 발생해서 I/O관리자로 부터 IRP가 생성되어 드라이버 오브젝트에 전달 되면, 디바이스 스택 최상단에서 부터 아래로 IRP가 전달 된다. 그러면 우리는 상위 필터 드라이버에서 IRP를 처리하여 원하는 기능을 수행하면 될 것이다.
다음으로 알아야할 개념은 필터 매니저(FltMgr.sys)이다.
필터 매니저는 필터 드라이버를 관리한다.(아래의 그림을 참고)
위 사진은 'FltXXX' 형식의 이름을 가지는 필터 매니저(FltMgr.sys)의 익스포트 함수를 사용하여 scannery.sys를 필터 드라이버로 등록하는 과정이다. 동작과정은 그림으로 살펴보고, 중요한 CALLBACK함수 등록에 대해 살펴보면 필터 핸드를 반환 받을때 콜백함수가 등록이된다. 필터 매니저가 scanner.sys 필터 드라이버에게 실시간 I/O가 발생했다고 알려주는 방법이 바로 콜백함수를 호출하는 것이다. 즉, 자신이 관심있는 이벤트를 콜백함수로 등록하여 실시간 I/O모니터링한다.
또한 빨간색 네모 박스와 하단에 있는 구조체의 원형을 유심히 보고,
PFLT_PRE_OPERATION_CALLBACK, PFLT_POST_OPERTAION_CALLBACK에 대응되는 함수를 살펴보자.
위 사진 중 'IRP 전달과정'을 보면 스택 최상단->하단 -> 최상단으로 IRP가 이동?전달한다.
- PRE는 IRP가 하단으로 내려갈때, 다시말해 IRP가 수행되기전
- POST는 IRP가 상단으로 올라올 때, 다시말해 IRP가 처리된 후
참고
https://nurilab.github.io/2020/05/18/kicomav_driver_1/
https://nurilab.github.io/2020/05/25/kicomav_driver_2/
'WindowsDriver' 카테고리의 다른 글
특정 프로세스 차단 드라이버 개발 (최종) (0) | 2021.07.07 |
---|---|
Mini Filter Driver Dev Part2. (feat. 개념) (0) | 2021.06.24 |
WindowsDriver Develop Basic2 [정리중] (0) | 2020.09.23 |
WindowsDriver Develop Basic [정리중] (0) | 2020.09.22 |