第一章 Windows設備驅動程序設計Hello World

Hello World是程序設計的經典,幾乎所有的語言教學都以此爲開頭。本教程也藉此開篇。

先看看C的Hello World:

int main()
{
    printf("Hello World!\n");
    return 0;

把它存爲hello.c,用VC或者gcc hello.c就可以生成執行文件,運行執行文件就可以看到結果。

驅動程序的Hello World來的稍微複雜一點。

驅動程序的入口函數是DriveEntery.所以最簡單的WDM驅動代碼如下:

NTSTATUS
DriverEntry (
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    )
{
    DbgPrint(("Hello World!\n"));
    return STATUS_SUCCESS;
}

要編譯,運行並且看到這個Hello World的結果就要麻煩一些了。首先你得有(Driver Develpment Kit)DDK,可以到網上下載,或者買光盤。DDK裏面提供了豐富的例子,一般的驅動程序,可以參考DDK裏面的例子。

將文件存爲hello.c, 當然前面先要include ddk的頭文件:

#include <ntddk.h>

要編譯這個文件,需要建一個make文件和resource文件。在ddk裏面,make文件可以都一樣。

makefile的內容應該是如下:

#
# DO NOT EDIT THIS Edit .\sources. if you want to add a new source
# file to this component. This file merely indirects to the real make file
# that is shared by all the driver components of the Windows NT DDK
#

!INCLUDE $(NTMAKEENV)\makefile.def

一般不要更改這個文件,如果要加入源文件應該編輯sources文件。

簡單的source文件如下:

TARGETNAME=hello
TARGETPATH=obj
TARGETTYPE=DRIVER


SOURCES=hello.c

有了這3個文件就可以編譯出驅動程序hello.sys了。

首先進入編譯環境,開始->Development Kits->DDK XXXX->build enviorenments->windows XP->Windows XP Checked Build Environment.

進入這三個文件的存放目錄,執行build。編譯完成後,目錄下產生了objchk_wxp_x86\i386,下面有個文件hello.sys,這就是我們第一步的成果了。

如何才能看到運行的結果呢?我們需要把這個驅動程序加載到操作系統中。最簡單的加載辦法是通過寫註冊表。這裏有個.reg的文件,幫助修改註冊表,也可以手動來修改。hello.reg如下:

 

REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\hello]

"ErrorControl"=dword:00000001

#
# When to start the driver:
# At boot: Start=1
# Manually: Start=3
#
"Start"=dword:00000001

"Type"=dword:00000001

把我們編譯好的hello.sys拷貝到系統的驅動程序目錄下C:\WINDOWS\system32\drivers,然後重新啓動操作系統,這個驅動就可以在啓動的時候被加載了。要看到Hello World!可以按照debugview這個軟件,這是簡單好用的驅動調試工具,它可以顯示DbgPrint打印出來的log。要選擇debugview的capture菜單裏面的log boot,可以buffer操作系統boot的時候的log。

重啓之後可以從debugview裏面看到log。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章