VC驱动开发项目配置
前提:
为方便测试,使用的是Server03 X86系统,VS2008的VC SP1开发环境,和windows_WDK_EN_7600(7600.16385.1)版DDK开发包。关于DDK安装和配置,见其他相关文章。
配置:
一,配置系统环境变量:
我的电脑->右键->属性->系统属性->高级-环境变量->新建,配置好DDK路径
二,配置VS环境
打开VC2008->Tools->Options->Projects and Solutions->VC++ Directories->Include Files 和 Library files,增加如下引用目录:
包含目录:
$(DDKROOT)\api
$(DDKROOT)\crt
$(DDKROOT)\ddk
$(DDKROOT)\wdf\kmdf\1.9
链接目录:
$(DDKROOT)\lib\wdf\kmdf\i386\1.9
$(DDKROOT)\lib\wxp\i386
注意:inc\api放置在引用首位后,程序编译时会报类似如下错误
error C2065: '_In_' : undeclared identifier
error C2065: '_In_opt_z_' : undeclared identifier
原因为SDK目录中的头文件与DDK中的冲突,而且SDK中的较新。所以临时删除DDK中的sal.h文件,或用较新的头文件替换。
备注:如果还需要使用DDK自带的命令方式编译实例代码,还需要DDK中原来的Sal.h文件。
三,VC工程 配置
新建Win32项目,选控制台或Windows项目
修改工程设置:
1,删除新建项目自带的debug和release
选中新建的项目,右键->properties
点击 configuration manager,新建一个编译配置项
驱动配置一般是checked和free对应程序开发的debug和release
为避免混淆,删除默认的debug和release配置
2,添加源文件(.cpp, .h, .rc等)
3,修改工程的具体配置项
C/C++ 项:
选择 常规
调试信息:C7 兼容(/Z7)
警告等级:3级(/w3)
将警告视为错误:是
选择 优化
优化:禁用(/0d)
选择 预处理器
预处理器:WIN32=100;_X86_=1;DBG=1
选择 代码生成
启用最小生成:否
基本运行检查:默认
运行时库:多线程(/MT)
选择 高级
调用约定:__stdcall (/Gz)
连接器选项:
选择 常规
输出文件:$(OutDir)\$(ProjectName).sys
启用增量连接:否(/INCREMENTAL:NO)
附加库目录:$(DDKROOT)\lib\wxp\i386
选择 输入
附加依赖项:ntoskrnl.lib
忽略所有默认库:是(/NODEFAULTLIB)
选择 清单文件
启用用户账户控制(UAC):否
选择 调试
生成调试信息:是
生成程序数据库文件:$(TargetDir)$(TargetName).pdb
选择 系统
子系统:本机(/SUBSYSTEM:NATIVE)
堆栈保留大小:400000
堆栈提交大小:10000
驱动程序:驱动程序(/DRIVER)
选择 高级
入口点:DriverEntry
随机基址:默认值
数据执行保护(DEP):默认值
目标计算机:MachineX86 (/MACHINE:X86)
这样基本配置就好了。
根据使用的具体模块和功能,再修改具体的工程配置
一般wdm驱动,还需要增加 wdm.lib 库文件。
其他:
error LNK2019: unresolved external symbol @[email protected] referenced in function
微软用于检测缓冲区溢出的一个选项,需要增加对应的库
用户态添加:bufferoverflowU.lib
内核态添加:bufferoverflowK.lib