본문 바로가기

프로그래밍/Windows Device Driver

[WDK] passThrough 드라이버

반응형


이번에도 가장 먼저 이 드라이버가 무슨 일을 하는지 msdn부터 확인 해보겠다.

The passThrough minifilter demonstrates how to specify callback functions for different types of I/O requests. 

각각의 I/O 요청에 대한 콜백 루틴을 어떻게 지정해 주는지 알아보는 드라이버라고 한다?

요곤 nullfilter에 비해 용량도 무려 17kb 이상 크다.

요망하더라도 막상 보면 내용은 별로 없다.


보다시피 nullfilter에 비해 내용이 많지만....디버그 메세지 처리 관련 코드 들이다.

특이하게 PFLT_FILTER를  nullfilter에선 구조체 안에 짱박아서 전역 변수로 선언했는데 이번엔 그냥 냅다 빼버렸다는거?? 중요한건 아닌거 같으니까 그냥 패스하고.. 그 아래


이여 많다... 이렇게 많은 함수들이 등록 된다.

nullfilter에서 보이던 Entry, unload, xxxInstanceQueryTeardown 도 보이며 ...

각각의 IRP에 pre, post 콜백 루틴을 등록하는 방법을 보여준다.

예시로 IRP_MJ_CREATE 호출 되기전에 ptPreOperationPassThrough 너 호출 되야해~~

그리고 IRP_MJ_CREATE 호출 후에는 ptPostOperationPassThrough 너 호출 되야해~

간단하다=_=....내용은 이보다 더 많으니까 좀 더 많은 내용을 알고 싶으면 msdn에서 IRP_MJ_XXX에 대한 내용을 찾아보면 된다.


nullfilter에 비해 callback, setup, start, complete 루틴들이 더 등록 되었다.

PtInstanceSetup,QeuryTreadown, TeardownStart, TeardownComplete 

모든 루틴이 별 내용 없이 PAGEE_CODE만 존재한다.

DriverEntry, Unload 또한 nullfilter와 다르지 않게 디버그 메세지만 찍어주는 수준이다.


Pre 루틴이다. PtDoRequestOperationStatus 리턴이 TRUE면 

FltRequestOperationStatusCallback 으로 현재 상태의 정보를 알아오는 콜백루틴을 한번 더 등록한다.

그래서 PtOperationStatusCallback 루틴을 가보면 디버그 메세지를 출력하는 코드 밖에 없다.

Post 루틴을 별 내용 없이 디버그 메세지만 출력한다.

여기서 Pre 루틴에서 리턴 값을 FLT_PREOP_SUCCESS_NO_CALLBACK으로 리턴 시 post 루틴은 호출이 되지 않는다.

그외 리턴값에 대해서는 msdn에 잘 나와 있으니 번역 열심히 해서 보면 될 것이다.

빌드 이 후 드라이버를 로드한 화면이다.


반응형