WindowsDriver

Mini Filter Driver Dev Part1. (feat. 개념)

wsoh9812 2021. 6. 20. 18:57

'미니 필터 드라이버'를 제작하는데 있어서 필요한 내용만 정리하였다.


 

디바이스 스택이란?

  - 하나의 디바이스를 관리하기 위해 여러 드라이버가 필요하다

  - 드라이버들은 디바이스를 관리하기 위해 자신의 디바이스 오브젝트 생성

  - 여러 개의 디바이스 오브젝트가 스택으로 형성된다.

 

디바이스 스택 형성과정

  - 디바이스가 연결되면, 버스드라이버가 이를 발견하고 자신의 디바이스 오브젝트를 생성한다.(버스 드라이버)

  - 약속이 되어있다면, Function Driver가 그 위에 디바이스 오브젝트를 만든다. (기능 드라이버)

  - 필터드라이버가 있다면 그 위에 디바이스 오브젝트를 생성한다. 필터 드라이버)

 

버스 드라이버란?

  - 모든 디바이스에 대해 존재하며, 하드웨어와 컴퓨터 사이의 연결을 관리한다.

 

필터드라이버란?

  - Fuinction driverI/O 처리하는 것을 관찰 또는 fuction driver의 작업을 변경하기 위해 제작한다.

  - 기존의 드라이버가 제공하는 기능을 보완하거나 새로운 기능을 추가할 수 있는 드라이버

  - 기능 드라이버 밑에 있는 것은 '하위 필터 드라이버'라고 한다.

  - 기능 드라이버 위에 있는 것은 '상위 필터 드라이버' 라고 한다.

 

디바이스 스택 및 IRP전달 과정

위 그림에서 알 수 있듯이 이벤트가 발생해서 I/O관리자로 부터 IRP가 생성되어 드라이버 오브젝트에 전달 되면, 디바이스 스택 최상단에서 부터 아래로  IRP가 전달 된다. 그러면 우리는 상위 필터 드라이버에서 IRP를 처리하여 원하는 기능을 수행하면 될 것이다.

 

 

디바이스 스택 형성 과정

 

 


 

다음으로 알아야할 개념은 필터 매니저(FltMgr.sys)이다.

필터 매니저는 필터 드라이버를 관리한다.(아래의 그림을 참고)

 

출처:MSDN

 

 

 

 

 

필터 드라이버 등록과정

위 사진은 '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/

 

초간단 실시간 감시기 만들기 (1)

연재 순서 첫번째 글: 실시간 감시기란 두번째 글: 미니필터 드라이버를 사용하여 실시간 파일 I/O 확인하기 세번째 글: KicomAV 엔진을 사용하여 유해한 파일인지 확인하기 실시간 감시기란 과연

nurilab.github.io

 

https://nurilab.github.io/2020/05/25/kicomav_driver_2/

 

초간단 실시간 감시기 만들기 (2)

연재 순서 첫번째 글: 실시간 감시기란 두번째 글: 미니필터 드라이버를 사용하여 실시간 파일 I/O 확인하기 세번째 글: KicomAV 엔진을 사용하여 유해한 파일인지 확인하기 WDK 설치하기 WDK는 Windows

nurilab.github.io