開發(fā)環(huán)境:VS2013, WDK8.1
需要使用的工具:vmware player(安裝windows xp作為實驗環(huán)境), DriverMonitor(加載驅動的工具), DbgView(捕獲內(nèi)核的信息輸出)
1. 搭建開發(fā)環(huán)境
先安裝VS2013, 然后安裝WDK8.1。在vmware player中安裝windows XP虛擬機。下載DriverMonitor, DbgView到虛擬機中。
2. 創(chuàng)建驅動工程
打開vs2013, 創(chuàng)建工程:Visual C++ -> Windows Driver -> WDM -> Empty WDM Driver. 工程名字默認MyDriver1.
創(chuàng)建好sln之后刪除MyDriver Package這個工程。在MyDriver1中添加一個main.c的文件。這里需要注意的是,后綴是.c。因為使用C++的時候編譯后導出后的名字和代碼中實際寫的名字有些不同。
#include <ntddk.h>
NTSTATUS unload(PDRIVER_OBJECT driver)
{
DbgPrint("driver: %ws unload", driver->DriverName);
DbgPrint("Driver unload success..");
return STATUS_SUCCESS;
}
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path){
driver->DriverUnload = unload;
DbgPrint("%ws", reg_path->Buffer);
DbgPrint("Driver load success..");
return STATUS_SUCCESS;
}
生成解決方案,這樣就會生成第一個名為MyDriver1.sys的文件,這個文件就是我們的驅動文件了。上述代碼中,DriverEntry是驅動的入口函數(shù),這個是微軟規(guī)定好的,當我們的驅動加載的時候就會去執(zhí)行這個DriverEntry函數(shù)。在DriverEntry函數(shù)中,我們給driver設置了一個DriverUnload函數(shù),這個函數(shù)是在driver在卸載的時候執(zhí)行的。完成上述的內(nèi)容之后我們就可以將我們的driver拷貝到實驗平臺上進行測試了。
3. 驅動的加載和運行
在虛擬機中先打開DbgView工具,用來捕獲driver的輸出,然后打開DriverMonitor,選中我們生成的MyDriver1.sys, 然后點擊藍色的執(zhí)行按鈕。我們可以看到在DbgView中就顯示了我們在driver中輸出的內(nèi)容了。
點擊紅色的卸載按鈕,我們driver就被成功的卸載掉了,同時在DbgView中也可以看到我們在unload函數(shù)中寫的輸出了。
至此,我們的第一個驅動程序就完成了。