VS2012环境编译驱动(根据网络教程改编)

 VS2012环境编译驱动

准备:安装VS2012    "G:\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"

             安装WINDDK    C:\WinDDK

VS2012驱动编译配置

VS2012集成环境下编译驱动

 

1)打开VS新建一个空的 win32控制台程序

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

填写上名称event然后按确定

在弹出的win32应用程序向导里 选应用程序设置 →附加选项 勾选空项目→完成。

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

 在安装好的winddk中C:\WinDDK\7600.16385.1\src\general\event\wdm下找到相关文件(其中的MAKEFILE和SOURCES不要)复制到D:\file\Cxuexi\VS2012project\event\(新建的项目下,下图中文件名为Driver,实际根据自己项目的文件名为准)

3)选项目(P)→属性→配置属性→VC++目录→

1、在可执行文件目录中添加:(注意添加自己安装WINDDK的文件路径,左上角配置选择所有配置)

C:\WINDDK\7600.16385.1\bin\x86(此处可以不改,因为VS2012兼容此本版的DDK)

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

C:\WINDDK\7600.16385.1\inc\ddk

C:\WINDDK\7600.16385.1\inc\crt(可选)

C:\WINDDK\7600.16385.1\inc\api

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

C:\WinDDK\7600.16385.1\lib\wxp\i386

4)项目event属性设置

新建项目配置 check //必选

  注意左上角配置选项选check,查看VC++目录里的各个目录是否包含上面添加的路径,不包含再添加一次

配置属性

(一) 常规属性设置

目标文件扩展名:.sys

(二) C/C++属性设置

常规选项卡

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

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

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

优化选项卡

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

预处理器选项卡

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

代码生成选项卡

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

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

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

4安全检查:否 //可选:

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

高级选项卡

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

(三)  链接器属性设置

常规选项卡

1输出文件:$(OutDir)\$(ProjectName).sys//必选(配置属性常规中设置了目标文件扩展名此处也要设置)

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

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

输入选项卡

1附加依赖项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.lib,WmiXXX函数在 wmilib.lib ,NdisXXX函数在 ndis.lib )

(必要时需要增加微软的标准库 MSVCRT.LIB MSVCRTD.LIB(调试库)LIBCMT.LIBIBCMTD.LIB(调试库) ) ( 如果源码中有 source 文件,那么该文件的 TARGETLIBS 字段会列出该项目需要的库 )

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

调试选项卡  

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

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

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

系统(System)选项卡

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

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

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

高级选项卡

1入口点:DriverEntry//必选

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

3基址:0x10000 //建议选上

命令行选项卡”->其他选项(D)

1添加开关:/SECTION:INIT,D/IGNORE:4078 //建议填上 可以避免以下错误提示:

LINK : warning LNK4078: 找到多个“INIT”节,它们具有不同的属性(E2000020)

LINK : error LNK2001: 无法解析的外部符号__load_config_used

5).生成->重新生成

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

流程回顾:

在VS2012下新建项目WIN32控制台,应用程序设置里选空项目

在目录 Winddk\ 7600.16385.1\src\general\event\wdm里,将所有文件复制出来,到新建项目下

在项目->添加现有项,将4个文件导入进来,如果资源文件.rc在代码里,寻到用鼠标拖下来就行了现在要配置编译环境

在生成->配置管理器,点配置中的下拉箭头中选新建建一个check项目

在项目->属性->配置属性->VC++目录中(左上角配置中选要修改的对应项)

包含目录添加:

C:\WINDDK\7600.16385.1\inc\ddk

C:\WINDDK\7600.16385.1\inc\crt(可选)

C:\WINDDK\7600.16385.1\inc\api

还有一个库文件需要添加

C:\WINDDK\7600.16385.1\LIB\WXP\I386

可执行文件也要添加

C:\WINDDK\7600.16385.1\BIN\X86

再看一下C/C++里有几个可选项,在预处理器->预处理器定义设置为WIN32=100;_X86_=1;WINVER=0x501;DBG=1

运行时库选为多线程

缓冲区安全检查 否

高级中的调用约定要选择__stdcall 因为在驱动中都是这样的调用约定 然后是在链接器中 输出文件添加.sys增量链接 否

调试中都是可选项

System中子系统选 控制台

在高级中入口点必选 DriverEntry

项目可选0x10000

在输入中附加依赖项选 wdm.lib 如果是DDK驱动则是ntoskrnl.lib

运行一下成功了,再将刚才那个编译器的选项删除,

C:\WINDDK\7600.16385.1\BIN\X86

正常运行了,这是因为VC7自带的编译器已经支持DDK来进行编译了生成了驱动文件event.sys 8KB

 

常见错误:

无法打开包括文件:ntddk。h:没有这样的文件或目录:没有对VC++目录中包含目录设置

 

 

参考视频郁金香驱动视频51CTO下载-VC郁金香驱动008_VS2008环境下编译驱动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值