VS2008 、WDK 和DDKWizard搭建Win7驱动开发环境

来源:互联网 发布:加拿大28软件app 编辑:程序博客网 时间:2024/06/11 17:14

Published 23/03/2010 | By obaby

一、安装VS2008
二、安装Visual Assist (这不是必需的)但它确是我们开发时不可多得的好工具
三、安装WDK
四、安装DDKWizard
下载地址:http://ddkwizard.assarbad.net/
需要下载的文件有
1、ddkwizard_setup.exe
2、ddkbuild_bat.zip
3、ddkbuild_cmd.zip
安装第一个文件跟安装普通程序一样只需要按默认设置即可
2、3两个文件只需要解压copy到我们的wdk所有的根目录即可

接下来的我们便要设置环境变量了
需要设置的地方有两个
1、path
需将D:\WinDDK添加到Path变量中
否则编译时会出现找不到命令的错误

2、新建系统变量
变量名:WLHBASE
变量值为:J:\WinDDK\7600.16385.0 修改为你安装的wdk路径
如下图
                             

五、打开VS2008

工具》》选项》》项目和解决方案》VC++目录 ,增加WDK的根目录

到目此所有的设置工作都已完成。

六、编写简单的驱动程序并测试我们的驱动开发环境
1、新建一个project
选择DDK Project 中的 Empty driver
如图

接下来会跳了一个DDKWizard向导的一个对话框

这里可以保持默认设置 我这里只选择了 Windows7/2008 Server R2 WDK
Finish 后就可以开始写我们的驱动程序了
这里为了演示..我们什么也不做只打印输出”Hello”
简单驱动程序代码如下
注意保存为*.c格式 我这里保存为test.c

1

2

3

4

5

6

7

8

9

10

11

#include<ntddk .h>

VOID DriverUnload(PDRIVER_OBJECT  driver)

{

      DbgPrint("Hello\r\n");

}

NTSTATUS DriverEntry(PDRIVER_OBJECT  driver,PUNICODE_STRING reg_path)

{

      DbgPrint("Hello,Eping!");

      driver->DriverUnload=DriverUnload;

      return STATUS_SUCCESS; 

}</ntddk>

注意:sources文件中TARGETTYPE= 默认生成的代码
需要改为TARGETTYPE=DRIVER SOURCES=默认也为空 我把它改成SOURCES=test.c即可成功编译出 否则编译成功后你会发现找不到驱动文件

最后按F7在J:\Users\obaby\Documents\Visual Studio2008\Projects\EmptyDriver1\EmptyDriver1\objchk_win7_x86\i386就找到相关的驱动文件了:

  :)到此就大功告成了~

我试了一下,在环境变量设置的时候有些问题,比如,如果要编译win7的驱动,需要设置变量名为W7BASE的变量,我只设置WLHBASE的环境变量无法编译,返回3号错误,经过查看ddkbuild.cmd文件,发现错误是:
NT4BASE, W2KBASE, WXPBASE, WNETBASE and/or W7BASE environment variable(s) notset.
所以我觉得应该是要编译哪个平台的驱动,就设置相应的环境变量。

 

win7 64位驱动开发经验(1-好工具站长分享平台

我的驱动测试环境:win7 64 U版,win7 x64 checked build编译的驱动文件。

首先管理元身份启动 DebugView,配置:菜单capture capture kernelEnable Verbose kerenl Outptutcapture Event打勾,

其次管理元身份启动 InstDrv.exe填写正确路径,安装、启动。。。。

顺利的话看到DebugView输出想要的字符串

问题---解决方法:

1.安装驱动,无法获得句柄

没有管理员身份启动InstDrv工具

2.安装成功,启动失败
强制驱动签名导致:

解决办法:

关闭强制驱动签名的命令如下: bcdedit/set testsigning on用管理员身份打开CMD命令行,输入上面的命令,完成以后将电脑重启。。进入系统以后,打开设备管理器一看,原先那个警告没有了。查看其状态,为正常启用。