菜鸟之驱动开发1

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值