以前的代码都是在vs2008+DDKWIZARD+WDK上开发的,可以在vs2008下编译,现在看到vs2012集成了WDK8,打算转战下vs2012,可是发现完全无法直接通过原先的项目工程打开后编译,一堆乱七八糟的错误,然后新建WDM去写了个程序(如下),也是不行,求解答!!!!!!!!!!!!!!!!!!!!!!!!!!!
微软官方文档 驱动程序入门 上的WDK开发都是MDF的,没有WDM的!
现在我自己测试了一下WDM代码的编译,发现了问题!
代码是一个简单的HelloWDM,
#include <NTDDK.h>
NTSTATUS DriverEntry( __in PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegisterPath ){
DbgPrint("Hong,Hello World!!!");
return STATUS_SUCCESS;
}
编译结果有错误:
1>源.cpp(7): error C2220: 警告被视为错误 - 没有生成“object”文件1>源.cpp(7): warning C4100: “RegisterPath”: 未引用的形参1>源.cpp(5): warning C4100: “DriverObject”: 未引用的形参2>------ 已启动生成: 项目: MyDriver2Package, 配置: Vista Debug Win32 ------2>C:\Program Files (x86)\WindowsKits\8.0\build\WindowsDriver8.0.common.targets(1347,5): error MSB3030: 无法复制文件“E:\MyCode\HongTest\MyDriver2\VistaDebug\MyDriver2.sys”,原因是找不到该文件。========== 生成: 成功 0 个,失败 2 个,最新 0 个,跳过 0 个 ==========
无法生成sys文件!!
后来又测试了一下完整的WDM驱动代码(产品),发现基本还是一样的错误!
求解怎么回事?
我把属性设置--C/C++选项-->常规-->将警告视为错误选项改为否,倒是可以编译了,提示是sys程序编译成功,但是找不到生成的sys文件,这是生成失败了吗?
然后我用VS2012自动生成了一个UWDM的模型,什么都没添加就可以编译通过,我就往里加了个DbgPrint想输出点调试信息,编译不通过,说DbgPrint未定义,我把wdm.h添加进来,就一大堆错误,说重复定义了,我就奇怪了,这个错误究竟是怎么产生的?
请教下驱动高人:
VS2012+WDK开发WDM程序怎么编译生成sys!
------解决方案--------------------
旧的sources的驱动Project可以通过
File->Open->Convert Sources/Dirs...
转换成vcxproj工程进行驱动编译。
vs2008+DDKWIZARD+WDK方式生成的vcproj工程来编译驱动的方式本身就不被Microsoft推荐。
Microsoft在VS2012推出前,一直只推荐通过DDK Build + sources来编译驱动。
------解决方案--------------------
之前的驱动程序都有sources文件的。VS2012可以根据sources文件生成对应的vcxproj文件进行编译生成对一个的sys文件,
File->Open->Convert Sources/Dirs...
转换成vcxproj工程进行驱动编译。