开发环境:VS2013, WDK8.1
需要使用的工具:vmware player(安装windows xp作为实验环境), DriverMonitor(加载驱动的工具), DbgView(捕获内核的信息输出)
1. 搭建开发环境
先安装VS2013, 然后安装WDK8.1。在vmware player中安装windows XP虚拟机。下载DriverMonitor, DbgView到虚拟机中。
2. 创建驱动工程
打开vs2013, 创建工程:Visual C++ -> Windows Driver -> WDM -> Empty WDM Driver. 工程名字默认MyDriver1.
创建好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是驱动的入口函数,这个是微软规定好的,当我们的驱动加载的时候就会去执行这个DriverEntry函数。在DriverEntry函数中,我们给driver设置了一个DriverUnload函数,这个函数是在driver在卸载的时候执行的。完成上述的内容之后我们就可以将我们的driver拷贝到实验平台上进行测试了。
3. 驱动的加载和运行
在虚拟机中先打开DbgView工具,用来捕获driver的输出,然后打开DriverMonitor,选中我们生成的MyDriver1.sys, 然后点击蓝色的执行按钮。我们可以看到在DbgView中就显示了我们在driver中输出的内容了。
点击红色的卸载按钮,我们driver就被成功的卸载掉了,同时在DbgView中也可以看到我们在unload函数中写的输出了。
至此,我们的第一个驱动程序就完成了。