VS2008+DDK(3790.1830)+ddkwizard搭建驱动开发环境

   所谓万事开头难,一切对于新手都是那么的复杂而庞大,在高手门看来是很简单的东西,却可以让新手们头疼几天,其中我就是这样。

开始接触驱动的时候,光是搭建开发环境就折腾了好几天,最后仍没有一个很好的解决方案,不过,还是不要太依赖于工具,这样这失去了动手能力的意义,下面说一下VS2008+DDK(3790.1830)+ddkwizard搭建驱动开发环境。

   1:首先先下载vs2008并安装,这个就不用说了吧。

   2:在下载DDK,并安装,我这里是3790.1830版本的.

   3:分别下载 ddkbuild_bat.zip和ddkbuild_cmd.zip

   4:下载ddkwizard并安装。

  在这里我就不提供下载地址了,大家可以g.cn找找。

 

  将3中的两个文件放到ddk安装文件的跟目录笔者的效果图1如下:

 

 

还是图最直接... : )

 

 

  将上述文件(DDKBUILD.bat 和 DDKBUILD.cmd )的路径添加到系统的path变量(右击我的电脑,系统属性/高级/环境变量/系统变量/path变量双击修改值)。

 

 接下来根据你所安装的DDK的不同版本添加不同的变量到系统变量中。
  右击我的电脑,系统属性/高级/环境变量/系统变量/新建:
  2000 DDK则变量名为: W2KBASE
  XP DDK则变量名为: WXPBASE
  2003 sp1 DDK则变量名为: WNETBASE
  这里我的是WXPBASE(值为E:/WINDDK/3790.1830)

 

  接下来就是在VS2008中下做"手脚",打开vs2008,在菜单栏中选择工具-->选项-->项目和解决方案-->vc++目录,然后在右上角的下拉框中选择可执行文件,然后添加1的两个文件的路径,笔者这里效果图2如下:

然后选择包含文件栏目,加入E:/WINDDK/3790.1830/lib/wnet/i386和E:/WINDDK/3790.1830/inc/ddk/wnet效果图3如下:

 这里请读者根据自己的路径来配置。

基本的配置已经完成,然后来新建一个驱动工程,在其他项目-->vc++-->DDK project,里面选择Driver就会建立一个简单的驱动,然后CRTL+F5进行编译,在到工程路径地下会出现一个sys文件。

 如果要新建一个空工程,直接选择Empty driver工程,字节写代码。

 关于简单的配置就到这里,不过还要说的是,这个配置在XP系统里好像有点问题,用VS2008编译出来的是2003版本的,由于能力有限未能解决,笔者以VS2008来编写代码,然后手动用DDK的编译器来编译,这样就会编译出XP版本的。

 

VS2008编译驱动环境配置

一、      新建一个空的 win32控制台程序

 1、选(文件→新建→项目→Visual C++项目→win32win32控制台项目)创建一个

 

填写上名称event然后按确定
在弹出的win32应用程序向导里 选应用程序设置 →附加选项 勾选空项目→完成。

 

 、  选项目菜单→添加现有项→添加所有驱动相关的*.h,*.c,*.cpp,*.rc之类的文件。

三、      选工具(T)→选项(O)....→项目→VC++目录→

  1、在可执行文件目录中添加:

    D:/WINDDK/3790.1830/BIN/X86   //VS2003(没测),VS2005(没测),VS2008内不需要

 

  2、在包含文件目录添加如下路径

    D:/WINDDK/3790.1830/inc/wxp
    D:/WINDDK/3790.1830/inc/crt    (
可选
)
    D:/WINDDK/3790.1830/inc/ddk/wxp
    D:/WINDDK/3790.1830/inc/ddk/wdm/wxp

 

  3、在库文件目录中添加:

    D:/WINDDK/3790.1830/LIB/WXP/I386

 

四、      项目event属性设置

新建项目配置 check //必选

()C/C++属性设置

   常规选项卡

1调试信息格式(C7兼容(/Z7) //可选

2警告等级    2(/W2)  //可选

3将警告视为错误 ((/wx)  //可选

   优化选项卡

1优化(禁用/Od)          //可选

  预处理器

    预处理器定义:WIN32=100;_X86_=1;WINVER=0x501;DBG=1   //必选

  代码生成

    启用最小重新生成:否   //可选

    基本运行时检查:默认值 //可选

    运行时库:多线程调试(/MTd)  多线程(/MT)  //建议选

    缓冲区安全检查:否   //可选

 (可避免出现 LINK : error LNK2001: 无法解析外部符号 __security_cookie)

  高级

 调用约定 __stdcall(/Gz)   //必选

2)      链接器

 常规:

 输出文件:$(OutDir)/$(ProjectName).sys //必选

 启用增量链接:否(/INCREMENTAL:NO) //建议选上

 

忽略导入库:是 //可选 ( 设置为此值时,必须在附加库目录中加:D:/WINDDK/3790.1830/lib/wxp/i386 ,这样项目就不会依赖IDE环境的设置 )    ( 设置为此值时,将依赖 IDE 的环境的相关设置 )

 输入:

附加依赖项ntoskrnl.lib Hal.lib wdm.lib wdmsec.lib wmilib.lib ndis.lib MSVCRT.LIB LIBCMT.LIB //必选其12

//NT式驱动 ntoskrnl.lib  WDM式驱动  wdm.lib
 ( HalXXX
函数在Hal.libWmiXXX函数在 wmilib.lib NdisXXX函数在
 ndis.lib )
 ( 
必要时需要增加微软的标准库 MSVCRT.LIB MSVCRTD.LIB(调试库) LIBCMT.LIBIBCMTD.LIB(调试库
) )
 ( 
如果源码中有 source 文件,那么该文件的 TARGETLIBS 字段会列出该项目需要的库 )

    忽略所有默认库:是(/NODEFAULTLIB)

 清单文件:

   启用用户账户控制(UAC  //必选 不然会出现 >LINK : fatal error LNK1295: “/MANIFESTUAC”“/DRIVER”规范不兼容;链接时不使用“/MANIFESTUAC”

 调试:

    生成调试信息 (/DEBUG) //可选

    生成映像文件:是(/MAP)  //可选

    映像文件名:$(TargetDir)$(TargetName).map //可选

  系统(System)

    子系统:控制台(/SUBSYSTEM:CONSOLE) //必选

    堆栈保留大小:4194304 //可选

    堆栈提交大小:4096    //可选

    驱动程序:   驱动程序(/DRIVER) //必选

    高级:

入口点:DriverEntry   //必选

随机基址:默认值    //必选 不然会出现 1>G:/event2008/check/event2008.exe : fatal error LNK1295: “/DYNAMICBASE”“/DRIVER”规范不兼容;链接时不使用“/DYNAMICBASE”

数据执行保护(DEP): 默认值 //必选 不然会出现 G:/event2008/check/event2008.sys : fatal error LNK1295: “/NXCOMPAT:NO”“/DRIVER”规范不兼容;链接时不使用“/NXCOMPAT:NO”

 

设置效应和:是(/RELEASE) //可选

基址:0x10000          //建议选上

  命令行”->附加选项:

    添加开关:/SECTION:INIT,D /IGNORE:4078 //建议填上

      可以避免以下错误提示
      LINK : warning LNK4078: 
找到多个“INIT”节,它们具有不同的属性(E2000020)
      LINK : error LNK2001: 
无法解析的外部符号__load_config_used

五.编译,链接。

一些要修改DDK例子源码方能成功的问题,目前不知道什么选项可以不改:
    
源码中的关键字 try 要改为 __try , except 要改为 __except .


Visual Studio 2008 编译驱动程序的设置方法
2009-06-11 23:53

Visual Studio 2008 编译驱动程序的设置方法


一.用VS2008创建一个“空项目”:(“Visual C++” -> “常规” -> “空项目”)

二.将编写好的源代码文件导入项目中

三.修改VS2008 的IDE 设置,添加支持驱动程序编译链接的头文件和库文件

    在Include目录中添加:

    D:\WINDDK\3790.1830\inc\wxp
    D:\WINDDK\3790.1830\inc\crt (可选)
    D:\WINDDK\3790.1830\inc\ddk\wxp
    D:\WINDDK\3790.1830\inc\ddk\wdm\wxp

    在Lib目录中添加:

    D:\WINDDK\3790.1830\lib\wxp\i386

四.修改项目属性。

    将项目属性依次修改为:

    “配置属性”->“C/C++” -> “常规”:

    调试信息格式:C7 兼容(/Z7)

    “配置属性”->“C/C++” -> “预处理器”:

    预处理器定义:WIN32=100;_X86_=1;WINVER=0x501;DBG=1 
                 
                ( WINVER = 驱动运行的Windows版本: 0x500 = win2000 , 0x501 = winxp 0x502 = win2003
                  _X86_ 表示 32位系统,_AMD64_ 表示64位系统 ,_IA64_ 表示intel 安腾 64位系统
                  DBG=1 表示创建调试版本的驱动 )

                ( 编译2000的NDIS驱动时增加:BINARY_COMPATIBLE=0;NDIS40_MINIPORT=1;NDIS40=1;NDIS_MINIPORT_DRIVER=1 )
                ( 编译XP,2003的NDIS驱动时增加:BINARY_COMPATIBLE=0;NDIS51_MINIPORT=1;NDIS51=1;NDIS_MINIPORT_DRIVER=1 )
                ( 如果项目有 source 文件,那么该文件的 C_DEFINES 字段会说明此项目编译时需要预定义的标识符 )
                ( 有时候有些问题,比如未声明的标识符,或者标识符的类型不对,或者结构没有成员之类的问题,这时需要看具体源码中的一些定义是不是被条件编译指令 #if 屏蔽,如果是,增加一些定义项目再尝试编译 )

    忽略标准包含路径:是 ( 设置为此值时,必须加入项目需要的所有头文件所在的目录,参看第三步的内容,这样项目就不会依赖IDE环境的设置 )
                      否 ( 设置为此值时,将依赖 IDE 的环境的相关设置 )

    “配置属性”->“C/C++” -> “代码生成”:

    启用最小重新生成:否

    基本运行时检查:默认值

    运行时库:多线程调试(/MTd) 或 多线程(/MT)

    缓冲区安全检查:否   (可避免出现 LINK : error LNK2001: 无法解析外部符号 __security_cookie)

    “配置属性”->“C/C++” -> “高级”:

    调用约定:__stdcall (/Gz)

    “配置属性”->“链接器” -> “常规”:

    输出文件:$(OutDir)\$(ProjectName).sys

    启用增量链接:否(/INCREMENTAL:NO)

    忽略导入库:是 ( 设置为此值时,必须在附加库目录中加:D:\WINDDK\3790.1830\lib\wxp\i386 ,这样项目就不会依赖IDE环境的设置 )
                否 ( 设置为此值时,将依赖 IDE 的环境的相关设置 )

    “配置属性”->“链接器” -> “输入”:

    附加依赖项:ntoskrnl.lib Hal.lib wdm.lib wdmsec.lib wmilib.lib ndis.lib MSVCRT.LIB LIBCMT.LIB
              ( HalXXX函数在Hal.lib,WmiXXX函数在 wmilib.lib ,NdisXXX函数在 ndis.lib ) 
              ( 必要时需要增加微软的标准库 MSVCRT.LIB MSVCRTD.LIB(调试库) LIBCMT.LIB LIBCMTD.LIB(调试库) )
              ( 如果源码中有 source 文件,那么该文件的 TARGETLIBS 字段会列出该项目需要的库 )

    忽略所有默认库:是(/NODEFAULTLIB)

    “配置属性”->“链接器” -> “清单文件”:

    启用用户帐号控制UAC:否

    “配置属性”->“链接器” -> “调试”:

    生成映像文件:是(/MAP)

    映像文件名:$(TargetDir)$(TargetName).map

    “配置属性”->“链接器” -> “系统”:

    堆栈保留大小:4194304

    堆栈提交大小:4096

    驱动程序:驱动程序(/DRIVER)

    “配置属性”->“链接器” -> “高级”:

    入口点:DriverEntry

    设置效应和:是(/RELEASE)

    基址:0x10000

    随机基址:默认值

    数据执行保护(DEP):默认值

    “配置属性”->“链接器” -> “命令行”->“附加选项”:

    添加开关:/SECTION:INIT,D /IGNORE:4078 /safeseh:no 
      可以避免以下错误提示
      LINK : warning LNK4078: 找到多个“INIT”节,它们具有不同的属性(E2000020)
      LINK : error LNK2001: 无法解析的外部符号__load_config_used

五.编译,链接。

本人按照以上设置成功编译链接 Windows Server 2003 sp1 DDK 的几乎所有例子

一些要修改DDK例子源码方能成功的问题,目前不知道什么选项可以不改:
    源码中的关键字 try 要改为 __try , except 要改为 __except .

DDKWizard is a so-called project creation wizard that allows you to create projects that use the DDKBUILD scripts from OSR (also available in the download section from this site). The wizard will give you several options to configure your project prior to the creation. Have a look at figure 1. Figure 2: Project creation dialog (click to enlarge) Instead of forcing you to use a subset of options and specific DDKs this wizard lets you choose what you want. Of course the template files are predefined and so is the content of the project(s) within certain limits. However, I tried to choose the best options that I could think of and provide a way to create quickly and easily the DDKBUILD project you want. This means that I tried to leave out those things that may limit your choice lateron and add other options that will give you the flexibility to change options quickly long after the project was created. DDKWizard adds a new subfolder in the project creation wizard - see figure 2 - and presents all supported project types there. Currently these are Driver, Empty Driver, Native Application, Win32 console application and Win32 DLL. In either case you just choose the type of project to create, give the name of the project and/or solution as well as other options (at the bottom) and you are being presented the wizard dialog (see figure 1). From the wizard dialog you choose the DDKBUILD script you want to use, the DDK or multiple DDKs as well as the other options. If you are curious about the Property Sheet feature, please download the manual and read the respective section there. Compatibility DDKWizard (1.2.0a) has been tested on the following configurations: Visual Studio Professional .NET with WNET DDK and DDKBUILD.CMD on Windows 2003 Server R2 Standard Visual Studio Professional .NET 2003 with WNET DDK and DDKBUILD.CMD on Windows 2003 Server R2 Standard Visual C++ 2005 Express with WNET DDK and DDKBUILD.CMD on Windows 2003 Server R2 Standard Visual Studio 2005 Professional with WNET DDK and DDKBUILD.CMD on Windows 2003 Server R2 Standard Visual Studio 2008 Professional with WNET DDK and DDKBUILD.CMD on Windows XP From this list one can deduce that it is supposed to also run if you got the respective "non-Express" Visual C++ version. Also if there has been some Visual C++ .NET 2003 Express DDKWizard is prepared for it. Download You could go watch the demo or download right away: Manual: contains the detailed description of how to configure DDKBUILD and use DDKWizard. If you are unsure whether you should download and install DDKWizard grab this file and skim over it. Download: ddkwiz_manual.pdf (~513kB, 2009-12-05@20-11-55, downloaded 31666 times) Installer (incl. manual) of DDKWizard 1.3.0a: this is the setup program which will install DDKWizard along with the manual on your computer and register it with Visual Studio. Download: ddkwizard_setup.exe (~557kB, 2009-12-05@20-12-37, downloaded 72787 times) DDKBUILD.CMD: Stable version 7.4/r60 of OSRs DDKBUILD NT script version. Feedback for this version can be sent to me directly. Download: ddkbuild_cmd.zip (~12kB, 2009-11-28@04-38-36, downloaded 20707 times) DDKBUILD.BAT (obsoleted by the above!): Version 6.12 of OSRs DDKBUILD batch script version. Download: ddkbuild_bat.zip (~6kB, 2008-03-21@15-59-07, downloaded 17226 times) Trunk version of DDKBUILD.CMD The version from trunk is available as well. Please note that this is not necessarily the same version as offered in the ZIP archive above. It may be in a better shape (e.g. reported bugs fixed) or slightly worse (e.g. new feature that is not yet stable). So use this version only if you want to test the latest development version and are able to provide feedback. Here is the link to the prettier ViewVC URL: ddkbuild/trunk - SVN clients get read-only access here. License All projects created by DDKWizard can be put under whatever license you like to put them. The scripts and HTML files which contain the DDKWizard logic are subject to the zlib license starting with version 1.2.0, before it was released under the GPL v2 from 1991. The zlib license is a lot more liberal and allows just about any kind of use for the script and "user interface" part of DDKWizard. The DDKBUILD scripts are mirrored with the permission of OSR. I will try to keep it synchronized at all times. Everything else Contact me here and also visit my blog and my website. Note that I usually announce new versions of DDKWizard and DDKBUILD on my blog - you also might want to subscribe to the RSS feed for DDKWizard and DDKBUILD. This page will be extended whenever I deem it necessary.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值