0
回答
菜鸟之驱动开发1
开发十年,就只剩下这套Java开发体系了   

 在之前一篇文章里介绍驱动开发环境搭建过程,现在就开始写驱动了。我是照着郁金香的视频教程学习驱动开发的。那驱动有些课时比较多余,我在学习的过程当中会终合考虑合并一些课时。今天这一课是学着写一个驱动的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

快动手试一试吧!!!!光看不写是不行的。


原文链接:http://blog.csdn.net/favormm/article/details/6686779
<无标签>
举报
长平狐
发帖于6年前 0回/330阅
顶部