Vs2010 配置驱动开发环境
1、安装VS2010,安装WDK 7.0(DDK);
2、新建VC++->空项目
3、打开(生成-->配置管理器) 并新建一个名称为"Dirver"的解决方案配置 从此处复制设置:debug
并将"Dirver" 设为活动解决方案配置。
4、打开 视图 -> 属性管理器。
5、在"Dirver" 解决方案配置 上点击右键,选择 添加新项目属性表 取名为"dirverProperty"、在"dirverProperty"上右键“属性” 并对他进行以下设置。
5.1 C\C++ 常规 调试信息格式 = 程序数据库(/ZI)
5.2 C\C++ 预处理器 - 预处理器定义 =
_X86_
_WIN32_WINNT=0x0500
5.3 C\C++ 代码生成 - 启用 C++ 异常 = 否
5.4 C\C++ 代码生成 - 基本运行时检查 = 默认值
5.5 C\C++ 代码生成 - 缓冲区安全检查 = 否(/GS-)
5.6 C\C++ 高级 - 调用约定 = __stdcall(/Gz)
5.7 C\C++ 高级 - 编译为 = 编译为C代码(/Tz)
5.8 链接器 - 常规 - 输出文件 = $(OutDir)\$(ProjectName).sys
5.9 链接器 - 常规 - 启用增量链接 = 默认(置空)
5.10 链接器 - 输入 - 附加依赖项 = *
ntoskrnl.lib
hal.lib
wdm.lib
wdmsec.lib
wmilib.lib
ndis.lib
MSVCRT.LIB
LIBCMT.LIB
5.11 链接器 - 输入 - 忽略所有默认库 = 是(/NODEFAULTLIB)
5.12 链接器 - 清单文件 - 生成清单 = 否(/MANIFEST:NO)
5.13 链接器 - 系统 - 子系统 = 本机(/SUBSYSTEM:NATIVE)
5.14 链接器 - 系统 - 驱动程序 = 驱动程序(/Driver)
5.15 链接器 - 高级 - 入口点 = DriverEntry
5.16 链接器 - 高级 - 基址 = 0x10000
5.17 链接器 - 高级 - 随机基址 = 置空 *
5.18 链接器 - 高级 - 数据执行保护 = 置空 *
5.19 通用属性-常规 - 目标文件扩展名 =.sys
6、配置vc++目录
6.1 视图 - 属性管理器
展开 Dirver -> 找到 Microsoft.Cpp.Win32.user 右键 -> 属性
打开 VC++ 目录
包含目录(自己的WinDDK安装路径) =
D:\WinDDK\7600.16385.1\inc
D:\WinDDK\7600.16385.1\inc\ddk
D:\WinDDK\7600.16385.1\inc\api
库目录 =
D:\WinDDK\7600.16385.1\lib\wnet\i386
============================================
为共工程新建一个cpp源文件编译测试一下吧:
// 包含ntddk.h头文件
#include<ntddk.h>
// 卸载函数
void UnloadDriver(PDRIVER_OBJECT pDriver);
// 入口函数
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver,PUNICODE_STRING str)
{
// 卸载函数的调用
pDriver ->DriverUnload = UnloadDriver;
// 输出一句话
DbgPrint("Loading mogui Driver.... \r\n");
return 1;
}
void UnloadDriver(PDRIVER_OBJECT pDriver)
{
//卸载输出
DbgPrint("Unloading mogui Driver......\r\n");
}
=============================================
但是这样配置的在运行helloworld时基本上不会报错,但是一旦往后面写,比如说在某个程序中调用ObDereferenceObject,
就会发现error LNK2019: 无法解析的外部符号 _ObfDereferenceObject@4,该符号在函数 _ccpOpenCom@8 中被引用
这时解决方案是
写道
最后发现我配置的vs2010中c/c++中预处理器定义里面的
就是5.2. C\C++ - Preprocessor - Preprocessor Definitions
_WIN32_WINNT=0x0400这句有问题,删掉_WIN32_WINNT=0x0400这句,再次编译连接就生成成功了,所以说网上给的那个vs2010配置驱动好像有点问题,
目前进展就到这里.
===========================
ClCompile:
mogui.cpp
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.h(543): error C2143: 语法错误 : 缺少“)”(在“const”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.h(543): error C2143: 语法错误 : 缺少“{”(在“const”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.h(543): error C2059: 语法错误:“,”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.h(543): error C2059: 语法错误:“)”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.h(550): error C2143: 语法错误 : 缺少“)”(在“const”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.h(550): error C2143: 语法错误 : 缺少“{”(在“const”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.h(550): error C2059: 语法错误:“,”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.h(550): error C2059: 语法错误:“)”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\excpt.h(56): error C2143: 语法错误 : 缺少“)”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\excpt.h(56): error C2085: “_ExceptionRecord”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\excpt.h(57): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\excpt.h(57): error C2085: “_EstablisherFrame”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\excpt.h(58): error C2085: “_Inout_”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\excpt.h(58): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\excpt.h(58): error C2085: “_ContextRecord”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\excpt.h(59): error C2085: “_Inout_”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\excpt.h(59): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\excpt.h(60): error C2059: 语法错误:“)”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\excpt.h(60): error C2085: “_DispatcherContext”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\excpt.h(104): error C2082: 形参“_exception_code”的重定义
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\excpt.h(105): error C2082: 形参“_exception_info”的重定义
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\excpt.h(106): error C2082: 形参“_abnormal_termination”的重定义
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(92): error C2061: 语法错误: 标识符“_Check_return_”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93): error C2054: 在“_Check_return_”之后应输入“(”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93): error C2143: 语法错误 : 缺少“)”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93): error C2085: “_isctype_l”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93): error C2085: “_C”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93): error C2085: “_In_”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93): error C2085: “_Type”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93): error C2085: “_In_opt_”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93): error C2146: 语法错误: 缺少“,”(在标识符“_locale_t”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93): error C2146: 语法错误: 缺少“,”(在标识符“_Locale”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93): error C2059: 语法错误:“)”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(94): error C2061: 语法错误: 标识符“_Check_return_”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(95): error C2086: “int _Check_return_”: 重定义
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93) : 参见“_Check_return_”的声明
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(95): error C2054: 在“_Check_return_”之后应输入“(”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(95): error C2143: 语法错误 : 缺少“)”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(95): error C2085: “_isalpha_l”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(95): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(95): error C2085: “_C”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(95): error C2085: “_In_opt_”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(95): error C2146: 语法错误: 缺少“,”(在标识符“_locale_t”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(95): error C2146: 语法错误: 缺少“,”(在标识符“_Locale”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(95): error C2059: 语法错误:“)”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(96): error C2061: 语法错误: 标识符“_Check_return_”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(97): error C2086: “int _Check_return_”: 重定义
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93) : 参见“_Check_return_”的声明
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(97): error C2054: 在“_Check_return_”之后应输入“(”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(97): error C2143: 语法错误 : 缺少“)”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(97): error C2085: “_isupper_l”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(97): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(97): error C2085: “_C”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(97): error C2085: “_In_opt_”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(97): error C2146: 语法错误: 缺少“,”(在标识符“_locale_t”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(97): error C2146: 语法错误: 缺少“,”(在标识符“_Locale”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(97): error C2059: 语法错误:“)”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(98): error C2061: 语法错误: 标识符“_Check_return_”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(99): error C2086: “int _Check_return_”: 重定义
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93) : 参见“_Check_return_”的声明
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(99): error C2054: 在“_Check_return_”之后应输入“(”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(99): error C2143: 语法错误 : 缺少“)”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(99): error C2085: “_islower_l”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(99): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(99): error C2085: “_C”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(99): error C2085: “_In_opt_”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(99): error C2146: 语法错误: 缺少“,”(在标识符“_locale_t”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(99): error C2146: 语法错误: 缺少“,”(在标识符“_Locale”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(99): error C2059: 语法错误:“)”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(100): error C2061: 语法错误: 标识符“_Check_return_”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(101): error C2086: “int _Check_return_”: 重定义
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93) : 参见“_Check_return_”的声明
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(101): error C2054: 在“_Check_return_”之后应输入“(”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(101): error C2143: 语法错误 : 缺少“)”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(101): error C2085: “_isdigit_l”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(101): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(101): error C2085: “_C”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(101): error C2085: “_In_opt_”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(101): error C2146: 语法错误: 缺少“,”(在标识符“_locale_t”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(101): error C2146: 语法错误: 缺少“,”(在标识符“_Locale”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(101): error C2059: 语法错误:“)”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(102): error C2061: 语法错误: 标识符“_Check_return_”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(103): error C2086: “int _Check_return_”: 重定义
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93) : 参见“_Check_return_”的声明
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(103): error C2054: 在“_Check_return_”之后应输入“(”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(103): error C2143: 语法错误 : 缺少“)”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(103): error C2085: “_isxdigit_l”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(103): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(103): error C2085: “_C”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(103): error C2085: “_In_opt_”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(103): error C2146: 语法错误: 缺少“,”(在标识符“_locale_t”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(103): error C2146: 语法错误: 缺少“,”(在标识符“_Locale”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(103): error C2059: 语法错误:“)”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(104): error C2061: 语法错误: 标识符“_Check_return_”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(105): error C2086: “int _Check_return_”: 重定义
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(93) : 参见“_Check_return_”的声明
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(105): error C2054: 在“_Check_return_”之后应输入“(”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(105): error C2143: 语法错误 : 缺少“)”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(105): error C2085: “_isspace_l”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(105): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(105): error C2085: “_C”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(105): error C2085: “_In_opt_”: 不在形参表中
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(105): error C2146: 语法错误: 缺少“,”(在标识符“_locale_t”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(105): error C2146: 语法错误: 缺少“,”(在标识符“_Locale”的前面)
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(105): error C2059: 语法错误:“)”
D:\Program Files\Microsoft Visual Studio 10.0\VC\include\ctype.h(105): fatal error C1003: 错误计数超过 100;正在停止编译
如果出现类似如下编译错误,解决方法是:拷贝C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\sal.h,然后覆盖掉C:\WinDDK\7600.16385.1\inc\api\sal.h。
===============================================
mogui.cpp
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): warning MSB8012: TargetPath(d:\my documents\visual studio 2010\Projects\driverp\driver\driverp.exe) 与 Linker 的 OutputFile 属性值(d:\my documents\visual studio 2010\Projects\driverp\driver\driverp.sys)不匹配。这可能导致项目生成不正确。若要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Link.OutputFile) 中指定的值匹配。
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(991,5): warning MSB8012: TargetExt(.exe) 与 Linker 的 OutputFile 属性值(.sys)不匹配。这可能导致项目生成不正确。若要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Link.OutputFile) 中指定的值匹配。
LINK : warning LNK4039: 用 /SECTION 选项指定的节“INIT”不存在
driverp.vcxproj -> d:\my documents\visual studio 2010\Projects\driverp\driver\driverp.exe
解决修改通用——>常规——>目标文件扩展名为:.sys
=====================================================