在之前一篇文章里介绍驱动开发环境搭建过程,现在就开始写驱动了。我是照着郁金香的视频教程学习驱动开发的。那驱动有些课时比较多余,我在学习的过程当中会终合考虑合并一些课时。今天这一课是学着写一个驱动的helloworld,并用WDK环境编译成sys文件。为了对驱动开发有一个更深入的了解,我在此并没有用我之前搭建好的VS2010驱动便宜环境,而是直接用notepad++,它是一个记事本的扩展程序,支持语法高亮。
新建一个HelloDriverWorld.c,然后用notepad++编辑它,代码如下:
#include <ntddk.h>
VOID Driver_Unload(IN PDRIVER_OBJECT pDriverObject);
int DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING RegistryPath)
{
KdPrint(("Hello Driver World 驱动加载成功"));
KdPrint(("记得要用双括号,在debug版本中KdPrint会用DbgPrint代替,release版就不做任何事"));
DbgPrint("这是最简单的驱动");
pDriverObject->DriverUnload = Driver_Unload;
return (1);
}
VOID Driver_Unload(IN PDRIVER_OBJECT pDriverObject)
{
KdPrint(("Hello Driver World 驱动卸载成功"));
}
记住驱动的入口函数不是main,而是DriverEntry, 驱动开发时的打印输出函数是KdPrint或DbgPrint, 它们两区别是KdPrint在check版本才有输出功能在Free版本不起作用,DbgPrint则在两个版本下都要输出,还在注意KdPrint是有两对括号!!!!还有check版本就相当于Debug版本,Free就相当于Release版本!!!Driver_Unload函数驱动卸载时会调用。
到现在为止,我们的驱动源码已写好了,如何便宜它呀? 便宜它需要两个文件,一个是makefile,另一个是Source文件,这两个文件都是文本文件。
makefiel内容如下:
# 此文件 一般情况下只有一行 并且不需要修改 不能有前导空格
!INCLUDE $(NTMAKEENV)\makefile.def
Source内容如下:
#下边这行指定生成驱动名字HelloDriverWorld.sys
TARGETNAME=HelloDriverWorld
#下边这行指定生成文件的类型DRIVER指驱动
TARGETTYPE=DRIVER
#下边这行指定生成驱动所在的路径\SYS\HelloDriverWorld.sys
TARGETPATH=SYS
#下边这行指定相关头文件所在目录路径
INCLUDES=$(WDKPATH)\inc;\
$(WDKPATH)\inc\ddk;\
##上边必空一行D:\WINDDK\3790.1830 等价$(WDKPATH),在系统环境变量里,如果没有自己添加
#下边这行指定驱动源代码*.cpp或者*.c
SOURCES=HelloDriverWorld.c\
里面内容都有注释, 我就不多说了。
好了,编译的准备工作都做好了,我们开始编译。(注意,我们是开发NT的驱动,所以得选Windows XP的编译环境)
打开WDK的编译环境,是一个命令行,然后进到我们放上面准备的三个文件目录,输入命令build开始编译。
如果是已经编译过,重新编译命令是:build -c
这样在同目寻下会成生一个sys目录,一路点进去,你会发现一个HelloDriverWorld.sys文件,它就是我们的驱动文件。
把它拷到我们的VMware xp系统里,用DriverMonitor这个工具就可以加载它,这时候用DbgView就可以看到我们的打印信息。
我把需要用到的驱动工具上传到svn上,大家可以直接下载。
源码下载:http://code.google.com/p/windows-driver-sky/source/browse/#svn%2Ftrunk%2FHelloDriverWorld
快动手试一试吧!!!!光看不写是不行的。