Programming/Kernel / Driver2008. 11. 30. 16:23

Driver 개발을 처음 하시는 분들은 따라할 만한 가이가 없어서 환경을 구축하는데도 시간이 많이 걸립니다. 개발은 말할것도 없구요 그래서 그동안의 자료를 바탕으로 정리를 해 봤습니다.

아래의 가이드를 따라하시면 기초는 세팅이 되었다고 할 수 있습니다.

예제 소스는 키보드 필터 드라이버입니다. DDK의 포함된 예제소스, Ctrl2CapSource, Filemon 공개소스등을 참고하여 만들었습니다.

사용자 삽입 이미지

[키보드 필터 드라이버 UI]



       - 키보드 필터 드라이버에서 참고할만한 사항은 아래와 같습니다. -

  • 필터 드라이버의 기본구조

  • 드라이버 동적로딩

  • IOCTRL을 통한 User Mode Program 과의 통신(키보드 스캔코드 출력)

  • 후킹 시작시 Ctrl2CapSurce와 같이 Caps Lock키를 Left Ctrl 키로 변경시켜 줌


          이후부터의 내용은 다른 분들의 글을 인용한 부분도 있습니다. 양해 부탁드립니다.

  1. SW 설치
    1. 필수 - DDK (NT, 2000, XP 등 해당 OS DDK)
    2. 옵션 - CompuwareDriverStudio

  2. 빌드 환경

    1. DDK를 통한 Build

      시작메뉴의 프로그램에서 설치된 DDK(Development Kits)에 가보면 Build Envrionment > Checked Build Environment, Free Build Environment 4개가 보인다. 그 중 하나 Checked Build Environment 를 클릭하면 필요한 환경변수 세팅 및 경로 세팅을 한 후 cmd창 하나가 실행된다. 이 상태에서 DDK 설치 폴더의 만만한 샘플 폴더(C:\WINDDK\src\input\kbfiltr)로 직접 이동해서 build라고 명령을 치면 Sources라는 파일(확장자 없음)을 참고하여 C파일들을 컴파일 및 링크까지해서 sys파일이 빌드되어진다.

      (Checked Build, Free Build 랑의 차이는 Debug/Release 차이랑 비슷하고, DDK Help 참조)

    1. VC++ 빌드 환경 사용법

      여러 방법이 있겠지만 제일 간단한 방법은 DriverStudio를 설치하면 생성되는 DDK sources to vcproj Converter(SrcToVcProj) 를 사용한다 .

      요걸 실행해서 Sources라는 파일을 Open, 그리고 메뉴의 Convert>Convert DDK dirs/sources를 실행해서 VC++6 Workspace를 선택해서 Convert를 누르면 해당 폴드에 DDK로 빌드 할 수 있게 환경설정이 된 dsw 파일이 생성된다. Sources파일을 Drag&Drop하면 바로 Convert Dialog가 뜬다. 우리가 새롭게 작성할 .c 파일을 특정 폴더에 만들고 Sources파일(DDKsrc 폴더 참고)을 생성하면 된다.

      우린 요걸 사용해서 Checked, Free 모드로 빌드하면 된다. 물론 VC 컴파일/빌드의 F7 단축키를 사용가능.

      빌드하기 전에 DriverStudio를 설치하면 생성되는 툴바 중 왼쪽에서 3번째 DDK Build Settings를 실행해서 DDK Root Dir을 설정해 주고 빌드.

      또 다른 빌드방법은 DriverStudio를 설치하면 생성되는 툴바 중 왼쪽에서 4번째 버턴(Build With DDK..)으로 할 수 있다.

      이 버턴이 활성화 되게 하려면 SrcToVcProj를 사용하여 dsw를 만들 때 해당 폴더에 makefile 파일(DDKsrc 폴더 참조)이 있으면 활성화 되어 컴파일 할 수 있다.

      , Windows 2000 Device Driver, Windows Driver Model 책의 awx 파일로 프로젝트를 만들어 빌드할 수 있지만 환경이 잘 맞지 않아 빌드가 잘 안되었음.

      SoftICE 환경 설정 및 사용법

  1. SoftICE 환경 설정 및 사용법

    1. 초기 SoftICE Windows 설정한다

      "SoftICE Initiallization Settings..." ->"Initialization string" 에 다음과 같이 세팅한다

      X; SET FONT 2; LINES 60; WL 10; WC 35;

      x : 디버거 모드 종료

      set font 2 : 2번째 폰트를 사용

      lines : 줄 수를 50 라인

      wc : 코드 윈도우 줄 수는 35라인.

      wl : 로컬변수 윈도우 줄 수는 10라인

    1. SoftICE 실행한다 – Start SoftICE

      - cmd 창이 떴다가 사라진다.

    2. Symbol Loader를 실행해서 대상 모듈을 “open”하고 심볼을 “load”한다.

      Open할때 파일 형식을 *.*으로 ㅎ고 해당 .sys파일을 선택한다.

    3. Ctrl + D를 눌러 SoftICE 디버거 창을 띄운다.

    4. 소스 파일을 연다.

      FILE * : 모듈에 관계된 모든 소스파일의 목록을 보여 준다.

      FILE test.c : test.c 파일의 내용을 코드 윈도우에 표시한다.

    1. F6키를 눌러 코드 윈도우로 이동한 다음 원하는 위치에서 F9를 눌러 브레이크 포인트를 설정한다.

      BL : 브레이크 포인트 목록을 표시한다.

      BC * : 모든 브레이크 포인트를 삭제한다.

      U 210 : 210번째 라인으로 이동

      T : step into(F8)

      P : step over(F10)

      G : 실행을 계속한다.

      F7 : excute to here

      WD : data window를 표시

      WW : watch window를 표시

      WATCH xx : 특정 xx 변수 값을 watch window에 표시

      Alt+C : 커서를 코드 윈도우로 이동

      Alt+L : 커서를 로컬변수 윈도우로 이동

      Alt+W : 커서를 watch window로 이동

      Enter : 로컬변수 창등에서 구조체의 내부를 표시

      ww : Watch창을 보이게 함.

      wl : 지역변수창을 보이게 함.

    2. 다시 Ctrl + D를 눌러 디버거 창을 닫는다.

      - 런터임시 BP가 걸리면 디버거 창이 뜬다. 위 단축키로 디버깅을 해보아라.


[키보드 필터 드라이버 소스]


Posted by skensita