디바이스 드라이버를 공부하면서 가장 어려운 것이 있다.
"왜 이런 구조이지? 왜 기존의 프로그램 구조랑 다르지?"
제약도 많이 존재한다. BSOD의 압박,
기본적인 드라이버를 작성할때 조건이 몇가지 있다.
일단은 DriverEntry() 가 존재해야한다.
DriverEntry()는 Main() 함수랑 같다.
DriverEntry() 안에서 Dispatch 루틴을 작성해야한다.
그리고 Unload() 루틴도 작성해야한다. 등록을 했으면 리소스를 반납해야한다.
그리고 MAKEFILE과 SOURCES 파일이 필요하다.
이렇게 알았으면 코드를 보자.
<TEXTAREA class="cpp" style="DISPLAY:
none" name=code rows=10 cols=60>#include "ntddk.h" #define FILE_DEVICE_HZ
0x9000 VOID HzUnload( IN PDRIVER_OBJECT ); typedef struct _DEVICE_EXTENSION {
ULONG Ordinal; } DEVICE_EXTENSION, *PDEVICE_EXTENSION; NTSTATUS DriverEntry( IN
PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegPath ) { // 드라이버 로드된 것을
DebugView에 뿌려준다. DbgPrint("HzDevice is Loaded\n"); // Dispatch Table을 작성한다.
DriverObject->DriverUnload = HzUnload; return STATUS_SUCCESS; } VOID
HzUnload( IN PDRIVER_OBJECT DriverObject ) { DbgPrint(" Hz Driver UnLoaded \n");
} </TEXTAREA>
Driver Loader란 프로그램을 다운로드 해서 등록을 시켜보자.
DriverLoader를 못구하겠다면 SCM을 이용해서 프로그램을 작성하면된다.
나중에 시간나면 코드를 올려야겠다.
이렇게 해서 DebugView로 출력을 보고 있으면
Load, Unload 글자가 뜨는것을 확인할 수 있을것이다.
다음에는 Driver의 Dispatch 루틴과 Unload 루틴을 좀더 보강시켜보자.
"왜 이런 구조이지? 왜 기존의 프로그램 구조랑 다르지?"
제약도 많이 존재한다. BSOD의 압박,
기본적인 드라이버를 작성할때 조건이 몇가지 있다.
일단은 DriverEntry() 가 존재해야한다.
DriverEntry()는 Main() 함수랑 같다.
DriverEntry() 안에서 Dispatch 루틴을 작성해야한다.
그리고 Unload() 루틴도 작성해야한다. 등록을 했으면 리소스를 반납해야한다.
그리고 MAKEFILE과 SOURCES 파일이 필요하다.
이렇게 알았으면 코드를 보자.
- #include "ntddk.h"
- #define FILE_DEVICE_HZ 0x9000
- VOID HzUnload( IN PDRIVER_OBJECT );
- typedef struct _DEVICE_EXTENSION
- {
- ULONG Ordinal;
- } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
- NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegPath )
- {
- // 드라이버 로드된 것을 DebugView에 뿌려준다.
- DbgPrint("HzDevice is Loaded\n");
- // Dispatch Table을 작성한다.
- DriverObject->DriverUnload = HzUnload;
- return STATUS_SUCCESS;
- }
- VOID HzUnload( IN PDRIVER_OBJECT DriverObject )
- {
- DbgPrint(" Hz Driver UnLoaded \n");
- }
Driver Loader란 프로그램을 다운로드 해서 등록을 시켜보자.
DriverLoader를 못구하겠다면 SCM을 이용해서 프로그램을 작성하면된다.
나중에 시간나면 코드를 올려야겠다.
이렇게 해서 DebugView로 출력을 보고 있으면
Load, Unload 글자가 뜨는것을 확인할 수 있을것이다.
다음에는 Driver의 Dispatch 루틴과 Unload 루틴을 좀더 보강시켜보자.