Home | Info | Research | Blog | Repos | Messages | Contact Me

 


'Windows Driver'에 해당되는 글 2건

  1. 2009/04/25 윈도우 커널 모드(드라이버)용 SQLite
  2. 2009/04/06 Kernel Mode DLL의 특성 (1)


SQLite는 아주 가벼운 데이터베이스 라이브러리입니다. SQL 문법을 사용할 수 있고 트랜잭션을 지원합니다.

이번에 윈도우 커널 모드(드라이버)에서 사용할 수 있는 SQLite를 만들어봤습니다. 윈도우 드라이버에서도 데이터를 데이터베이스 형식으로 관리하고자 할 때 사용할 수 있습니다. 혹은 유저모드에서 만든 SQLite 데이터베이스 파일을 윈도우 드라이버에서 읽거나 쓸 때에도 사용할 수 있습니다.

SQLite 버전은 3.6.12이며 WDK 6000 이상에서 빌드 할 수 있도록 작업하였습니다.

다운로드는 SQLiteForWindowsKernel 페이지에서 할 수 있습니다.



커널 모드 드라이버에서도 유저 모드의 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를 사용하는 드라이버와 같은 디렉토리에 있어야 합니다.

Export Driver를 만드는 방법 : http://www.wd-3.com/archive/KernelDlls.htm
Calling a DLL in a Kernel-Mode Driver
ExportDriver-src.zip : Export Driver 예제입니다.