Window7 驱动编程环境配置
1. 安装VS2010,WDK7.60(GRMWDK_EN_7600_1)
2. 新建VC 控制台项目(选择为空项目)
3. 新建项目配置“driver” ,点击下拉按钮-点击(配置管理器)
输入名称(driver)点击确定就可以了,其他的不要动哦!
完成后的效果!
点击确定按钮之后呈现出来的画面
鼠标右击新建的driver属性,会弹出以下窗口!
<我把wdk安装在E盘下>
a.
配置可执行文件目录:E:\WinDDK\7600.16385.1\bin\x86;
b.
配置包含目录:E:\WinDDK\7600.16385.1\inc\ddk
E:\WinDDK\7600.16385.1\inc\crt
E:\WinDDK\7600.16385.1\inc\api
c.
配置库目录: E:\WinDDK\7600.16385.1\lib\win7\i386
新建C/C++文件 不然无C/C++设置选项
<刚开始我们创建了一个空的项目所以项目里没有c++文件,现在要做的就是在空的项目-源文件-添加一个新建项c++文件>
常规
目标文件扩展名:.sys
//必选
6. 设置C/C++选项
常规选项卡
1
调试信息格式(C7 兼容(/Z7) //可选
2
警告等级 (2
级(/W2) //可选
3
将警告视为错误 (是(/wx)
//可选
优化选项卡
优化(禁用/Od)
//可选
预处理器
预处理器定义:WIN32=100;_X86_=1;WINVER=0x501;DBG=1
//必选
代码生成
启用最小重新生成:否
//可选
基本运行时检查:默认值
//可选
运行时库:多线程调试(/MTd)
或
多线程(/MT)
//建议选 <本人选择的是多线程调试(/MTd)>
缓冲区安全检查:否
//可选
(可避免出现 LINK : error LNK2001: 无法解析外部符号
__security_cookie)
高级
调用约定
__stdcall(/Gz)
//必选
7.
链接器设置
常规
启用增量链接:否(/INCREMENTAL:NO)
//建议 选上
忽略导入库:是
// 可选
( 设置为此值时,必须在附加库目录中加:
E:\WinDDK\7600.16385.1\lib\win7\i3865 这样项目就不会依赖 IDE 环境的设 置)
如果否 ( 设置为此值时,将依赖 IDE
的环境的相关设置
)
输入
附加依赖项
ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB
//必选
//NT式驱动 ntoskrnl.lib WDM式驱动
wdm.lib
( HalXXX 函数在Hal.lib, WmiXXX 函数在 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
//必选
随机基址:清空
//把框里的数据删掉。(yes也不是no也不是就是要一个干干净净的文本框)
//必选
不然会出现 e:\xxx.sys : fatal error
LNK1295:
“/DYNAMICBASE”与“/DRIVER”规范不兼容;链接时不使用“/DYNAMICBASE”
数据执行保护(DEP): 清空
//把框里的数据删掉。(yes也不是no也不是就是要一个干干净净的文本框) //必选
不然会出现 e:\xxx.sys : fatal error
LNK1295:
“/NXCOMPAT:NO”与“/DRIVER”规范不兼容;链接时不使用“/NXCOMPAT:NO”
设置效应和:是(/RELEASE) //可选
基址:0x10000
//建议选上
命令行:/SECTION:INIT,D
/IGNORE:4078 (建议不要写进去,会报错!)
最后给出一个超级简单的代码来测试一下我们配置的是否成功??
#include "ntddk.h"
NTSTATUS
DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING
RegistryPath)
{
return STATUS_UNSUCCESSFUL;
}
如果没有报错那么恭喜你配置成功了!
原文地址:http://www.cppblog.com/guojingjia2006/archive/2011/03/19/142211.html
本人尝试了一下,表示好用,特此保存。