编译环境用xp下VC6+DDK
新建一个文件夹当作工程目录,路径是E:\lingdux\
从别的工程copy过来两个文件,
一个是makefile,它用来指定文件之间的依赖关系,确定项目中哪些文件时需要重新编译的,那些事已经编译过的。里面的内容不用改,直接默认就OK
另一个是source,它用来保存一些配置信息,内容如下:
TARGETNAME=lingdux 这句用来指定目标程序存放的路径
TARGETTYPE=DRIVER 这句是指定目标类型,DRIVER为驱动程序
TARGETPATH=Driver 这句指定编译时的中间文件存放的路径
SOURCES=lingdux.c 这句指定了源文件
在工程目录想创建一个空文件命名lingdux.c,双击用VC6打开,开始写代码~!
遵循C语言,只有一个入口函数DriverEntry,有两个参数
NTSTATUS Driver Entry(IN PDRIVER_OBJECT DriverObject, 第一个是PDRIVER_OBJECT类型 系统进程调用的驱动对象
IN OUNICODE_STRING RegistryPath) 第二个是IN OUNICODE_STRING类型 字符串类型,注册路径
返回值类型为NTSTATUS,系统状态。
输出函数为DbgPrint(),包含的头文件是ntddk.h
编写完成后,发现这个驱动程序没有退出功能,系统加载后不能停止,重新启动后才能再次加载,不利于调试,下面就添加一个退出功能。
DriverObject->DriverUnload=Unload 为驱动对象注册一个卸载例程指定一个空函数
在驱动停止的时候被调用,用于删除一些设备对象,符号链接,释放驱动加载的资源。
VOID Unload(IN PDRIVER_OBJECT DriverObject)
{
}
完整代码如下:
#include <ntddk.h>
VOID Unload(IN PDRIVER_OBJECT DriverObject)
{
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
DriverObject->DriverUnload=Unload;
DbgPrint(“Hello World!”);
return STATUS_SUCCESS;
}
保存以上代码,然后打开DDK,路径选择工程目录,运行build命令,
编译出来的驱动文件为E:\lingdux\driver\i386\lingdux.sys
用coderui的驱动加载工具加载

用debug viwe成功截获到输出

沙发,我的!!
[回复]
零度x 回复:
五月 27th, 2009 at 00:44
欢迎~!
[回复]
地板….
[回复]
零度x 回复:
五月 27th, 2009 at 00:45
欢迎哦~!
[回复]
小跑儿~
[回复]
零度x 回复:
六月 12th, 2009 at 15:21
welcome
[回复]
请问零度兄,您学习windows驱动开发的书是哪本呢?望不吝相告。谢谢!
[回复]
零度x 回复:
十二月 30th, 2009 at 14:33
这位兄弟客气了,寒江独钓-windows内核安全编程,很不错的一本书。
[回复]