|
WDF Null-Driver 제작 |
작 성 일 : 2012-01-04 |
작 성 자 : 이 도 현 |
WDF를 사용하여 Make, Sources 파일의 작성 방법과 아무 기능도 없는 Null Driver제작을 해 보도록 하겠다.
Make파일, Sources 파일 작성법
Make 파일이란? Make파일은 Driver를 제작할 때 필요한 파일 중 하나이며, 기존의 WDM에서 사용되는 Make 파일을 그대로 사용해도 무방하다. 이 파일은 Microsoft에서 지정해놓은 매크로 문자열이 들어가있는데, WDK를 설치한 모든 소스파일에 동일한 Make파일이 들어가있다.
Sources파일이란? Sources파일은 Driver를 제작할 때 필요한 파일 중 하나이며, 컴파일 시 컴파일러가 어떠한 방식으로 컴파일을 할지 약속된 매크로를 통하여 컴파일을 수행 한다. 매크로 형식의 포맷은 다음과 같은 방식으로 선언 된다.
MACRONAME=MacroValue
여기서 사용하는 MacroValue는 텍스트 문자열로, 컴파일 시 내부 스크립트에 의해서 MACRONAME을 대체하기 위해 사용된다. 기본 구조는 이와 같은 구조를 띄고, Sources에서 사용되는 대표적인 매크로 이름에 대해서 알아보도록 하겠다.
- TARGETNAME 파일 확장자를 포함한 컴파일이 되는 라이브러리 이름을 정의하며, 반드시 정의되어야 하는 매크로이다.
- TARGETPATH 생성될 모든 파일들이 저장될 폴더 이름을 정의한다. 이 매크로 역시 반드시 정의되어야 하는 매크로이다.
- TARGETPATHLIB 프로젝트 빌드 시 다른 프로젝트에서 참조하기 위하여 생성된 라이브러리가 저장될 폴더와 이름을 지정한다. 이 매크로는 정의하지 않아도 상관 없다.
- TARGETTYPE 빌드될 프로젝트의 종류를 정의한다. 이 매크로는 정의가 반드시 되어야 하며, 아래와 같은 값들이 존재한다.
- TARGETLIBS 프로젝트에서 반드시 참조해야 되는 라이브러리를 정의 한다. WDM시절에는 반드시 정의 되어야 했지만, Windows 2000이상 호환버전의 WDK에서는 해당 매크로를 반드시 정의하지 않아도 컴파일에 문제는 없다.
- INCLUDES 컴파일 하는 동안 참조할 헤더 파일의 위치를 정의한다. 여기서 정의된 목록은 세미콜론(;)으로 분리되며, 지정된 위치는 헤더 파일이 위치한 전체 패스가 될 수 있고(절대적인 위치) Sources파일이 있는 폴더를 기준으로 하여 상대적 위치로 정의할 수 있다.
- SOURCES 컴파일 하고자 하는 파일을 지정하는 매크로이다. 해당 매크로는 반드시 정의해야 한다.
|
가장 간단한 Null Driver 작성하기
Visual Studio 2008을 통하여 가장 간단한 Null Driver를 작성해 보도록 하겠다.
새 프로젝트를 만들고 템플릿은 메이크파일 프로젝트를 선택한다.
이전 WDK Visual Studio 2008에서 컴파일 하기 위하여 설정하는 것을 동일하게 설정 해준다. 이제 간단한 드라이버를 작성하면 되는데 아래와 같은 코드로 작성하면 된다.
#include <ntddk.h> //드라이버언로드루틴선언 void NullDriverUnload( IN PDRIVER_OBJECT ); typedef struct _DEVICE_EXTENSION { ULONG Ordinal; }DEVICE_EXTENSION, *PDEVICE_EXTENSION;
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegPath ) { //DriverEntry는C언어에서Main() 루틴과같이해당드라이버의시작루틴이다. //Debug View에서메시지를알수있도록드라이버로드메시지를출력한다. DbgPring("NullDriver is Loaded\n");
//Dispatch Table을등록해준다. DriverObject->DriverUnload = NullDriverUnload; return STATUS_SUCCESS; }
void NullDriverUnload( IN PDRIVER_OBJECT ) { //드라이버가언로드되었음을디버그메시지로출력 DbgPrint("NullDriver is Unloaded\n"); }
이 외에도 필요한 MAKEFILE과 Sources파일과 해당 소스를 압축하여 동봉하였다. |
결과물
Visual Studio에서 컴파일을 진행하게 되면, 해당 프로젝트에 아래와 같은 폴더가 생성되면서 해당 폴더안에 nullDriver.sys 파일이 생성된다.
이제 만들어진 드라이버를 설치하는 과정만 남아 있는데, 드라이버를 설치하려면 inf 파일을 구성 해야한다. 하지만 이번 과정에서는 inf파일을 제작하지 않고, 동적으로 드라이버를 load, unload 시켜주는 Application을 통하여 설치를 진행 하도록 하겠다. <파일 첨부: instdrv.exe>
Instdrv 를 통하여 드라이버를 설치, 제거한 모습이다 사용방법은 텍스트 박스에경로를 지정해주고 해당 버튼을 클릭하면 동작 된다. |