编译环境用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的驱动加载工具加载

jiazai

用debug viwe成功截获到输出

jiehuo

, , , ,
Trackback

本文到目前为止有 8 个回复

  1. 沙发,我的!!

    [回复]

    零度x 回复:

    欢迎~!

    [回复]

  2. 大懒虫 @ 2009-05-26 22:53

    地板….

    [回复]

    零度x 回复:

    欢迎哦~!

    [回复]

  3. 一击屠夫 @ 2009-06-12 13:34

    小跑儿~

    [回复]

    零度x 回复:

    welcome

    [回复]

  4. 请问零度兄,您学习windows驱动开发的书是哪本呢?望不吝相告。谢谢!

    [回复]

    零度x 回复:

    这位兄弟客气了,寒江独钓-windows内核安全编程,很不错的一本书。

    [回复]

添加回复