Driver 개발을 처음 하시는 분들은 따라할 만한 가이가 없어서 환경을 구축하는데도 시간이 많이 걸립니다. 개발은 말할것도 없구요 그래서 그동안의 자료를 바탕으로 정리를 해 봤습니다.
아래의 가이드를 따라하시면 기초는 세팅이 되었다고 할 수 있습니다.
예제 소스는 키보드 필터 드라이버입니다. DDK의 포함된 예제소스, Ctrl2CapSource, Filemon 공개소스등을 참고하여 만들었습니다.
[키보드 필터 드라이버 UI]
- 키보드 필터 드라이버에서 참고할만한 사항은 아래와 같습니다. -
-
필터 드라이버의 기본구조
-
드라이버 동적로딩
-
IOCTRL을 통한 User Mode Program 과의 통신(키보드 스캔코드 출력)
-
후킹 시작시 Ctrl2CapSurce와 같이 Caps Lock키를 Left Ctrl 키로 변경시켜 줌
이후부터의 내용은 다른 분들의 글을 인용한 부분도 있습니다. 양해 부탁드립니다.
- SW 설치
- 필수 - DDK (NT, 2000, XP 등 해당 OS DDK)
- 옵션 - Compuware의 DriverStudio
-
빌드 환경
-
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 참조)
-
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파일(DDK의 src 폴더 참고)을 생성하면 된다.
우린 요걸 사용해서 Checked, Free 모드로 빌드하면 된다. 물론 VC 컴파일/빌드의 F7 단축키를 사용가능.
빌드하기 전에 DriverStudio를 설치하면 생성되는 툴바 중 왼쪽에서 3번째 DDK Build Settings를 실행해서 DDK Root Dir을 설정해 주고 빌드.
또 다른 빌드방법은 DriverStudio를 설치하면 생성되는 툴바 중 왼쪽에서 4번째 버턴(Build With DDK..)으로 할 수 있다.
이 버턴이 활성화 되게 하려면 SrcToVcProj를 사용하여 dsw를 만들 때 해당 폴더에 makefile 파일(DDK의 src 폴더 참조)이 있으면 활성화 되어 컴파일 할 수 있다.
또, Windows 2000 Device Driver, Windows Driver Model 책의 awx 파일로 프로젝트를 만들어 빌드할 수 있지만 환경이 잘 맞지 않아 빌드가 잘 안되었음.
SoftICE 환경 설정 및 사용법
-
SoftICE 환경 설정 및 사용법
- 초기 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라인.
- 초기 SoftICE Windows 설정한다
wl : 로컬변수 윈도우 줄 수는 10라인
-
SoftICE 실행한다 – Start SoftICE
- cmd 창이 떴다가 사라진다.
-
Symbol Loader를 실행해서 대상 모듈을 “open”하고 심볼을 “load”한다.
Open할때 파일 형식을 *.*으로 ㅎ고 해당 .sys파일을 선택한다.
-
Ctrl + D를 눌러 SoftICE 디버거 창을 띄운다.
- 소스 파일을 연다.
FILE * : 모듈에 관계된 모든 소스파일의 목록을 보여 준다.
FILE test.c : test.c 파일의 내용을 코드 윈도우에 표시한다.
- 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 : 지역변수창을 보이게 함.
-
다시 Ctrl + D를 눌러 디버거 창을 닫는다.
- 런터임시 BP가 걸리면 디버거 창이 뜬다. 위 단축키로 디버깅을 해보아라.