커널 모드 드라이버에서도 유저 모드의 DLL과 비슷한 형태로 불러 쓸 수 있는 것이 Export Driver입니다.

커널 모드 DLL이라고도 하는데, 실제 형태를 보면 유저 모드의 DLL 보다는 커널 모드 드라이버 형태를 띄고 있기 때문에 Export Driver 쪽이 맞습니다.

이 Export Driver의 특성은 일반 커널 모드 드라이버의 특성과 유저 모드 DLL의 특성을 모두 가지고 있습니다.

유저 모드 DLL과의 공통점

  • .def 파일로 Export 할 함수를 정의한다.
  • DllMain 함수 역할을 하는 DllInitialize라는 함수가 있다(하지만 유저 모드 DLL에는 없는 DllUnload라는 함수도 있다).
  • 유저 모드 DLL의 Implicit Link와 비슷한 형태로 동작한다. 드라이버를 로드하면 Export Driver는 자동으로 로드된다. 또한 드라이버가 언로드 되면 Export Driver도 자동으로 언로드 된다(단 언로드는 DllUnload 함수가 있어야 하고 .def 파일에 정의되어 있어야 한다).

커널 모드 드라이버 특성

  • DriverEntry 함수가 꼭 정의되어 있어야 한다. 없으면 빌드가 되지 않음. .sys 확장자를 가진다.
  • StartService와 같은 SCM 함수나, 레지스트리 설정을 통해 Export Driver 만 독자적으로 로드, 언로드할 수 있다.

Export Driver를 SCM 함수로 직접 로드한 것과, Implicit Link 형태로 자동 로드 되었을 때의 차이점.

  • SCM 함수로 로드한 것은 드라이버 로드, 언로드 될 때 DriverEntry와 Unload 함수가 호출 된다. 따라서 Driver Object가 생성된다.
  • Implicit Link 형태로 자동 로드 한 것은 드라이버 로드, 언로드 될 때 DriverEntry와 Unload 함수가 호출되지 않는다. 따라서 Driver Object가 생성되지 않는다. 대신 드라이버 로드, 언로드 될 때 DllInitialize, DllUnload 함수가 호출 된다.
  • SCM 함수로 직접 로드되었을 때에는 이후 DllInitialize, DllUnload 함수는 호출되지 않는다.

Implicit Link 형태로 로드하고자 한다면 레지스트리의 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services에 키를 만들지 않아도 되고, CreateService 함수로 서비스를 생성하지 않아도, Export Driver를 로드하는데에는 문제가 없습니다. 단 주의할 점은 Export Driver를 사용하는 드라이버와 같은 디렉토리에 있어야 합니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

06 April 2009