VS2012+WDK8.0环境配置

来源:互联网 发布:成功的网络大电影 编辑:程序博客网 时间:2024/06/16 13:29

        以前都是用vs2013的最近换成vs2012,为了编写nt式的驱动所以就安装wdk8.0,这篇文章主要记录我自己配置的过程和在编写驱动时遇到的问题以及解决方法。安装方面我就不写了,直接下一步就好了。

        安装完成后,打开虚拟机,安装一个被调试的操作系统,我选用的是win7 32位, 64位需要关闭驱动的数字签名,在虚拟机设置里,添加串行端口com1,很多人添加后都是com2,你只需要把打印机去掉就好了,串口类型选择输出到命名管道,把下面的另一端是虚拟机改成另一端是应用程序,点击确定添加完成。接下来打开vs2012,在主菜单选择DRIVE ---> Test ---> Configure Computer 点击下一步,点击Add New Computer,选择第三个手动配置,如果下一步是灰色的,则更改上面的Computer Name,点击下一步,配置如下:

运行虚拟机,把虚拟机设置成调试模式,具体步骤如下:

1、首先以管理员权限打开cmd,然后设置com1, baudrate为115200:bcdedit /dbgsettings serial baudrate:115200 debugport:1

2、复制一个启动项以便进入调试模式:bcdedit /copy {current} /d DebugEntry,这个时候下面会出现一个ID类似{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx},复制他替换下面的{ID}

3、bcdedit /displayorder {current} {ID}

4、bcdedit /debug {ID} ON

成功后重启计算机,这样环境就配置好了,接下来是编写驱动程序,首先我们写一个最简单的驱动测试一下,在vs2012中,点击文件 ---> 新建项目,在vc++里选择Windows Driver,我们发现并没有nt驱动的选项,解决方法是选择一个空的WDM驱动即可,项目名为MyFirstDriver,在项目里删除inf文件,这个很重要,否则会导致编译不过去,然后新建一个.c的文件,文件名为main.c,代码如下:

</pre><pre name="code" class="cpp">#include <ntddk.h>VOID MyDriverUnload(PDRIVER_OBJECT pDrivObj){KdPrint(("卸载驱动\n"));}NTSTATUS DriverEntry(PDRIVER_OBJECT pDrivObj, PUNICODE_STRING pRegPath){KdPrint(("进入Driver\n"));pDrivObj->DriverUnload = MyDriverUnload;return STATUS_SUCCESS;}

编译出现错误main.c(3): error C2220: 警告被视为错误 - 没有生成“object”文件,这个是因为警告等级太高,在项目 ---> 属性 ---> C/C++里把警告等级改成 等级3(/W3),项目顺利编译,在vs2013当中可能还是编译不过去,错误为No certificates were found that met all the given criteria,在Driver Signing里,把Sign Mode 改成off。接下来是运行虚拟机选择调试模式,点击vs的开始调试按钮,这样就进入双机调试了,然后我再说说调试遇到的问题,

1、虚拟机映射网络磁盘的时候看不见共享文件夹,解决方案:关闭虚拟机的防火墙

2、在DbgView看不见输出,解决方案:修改注册表,HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/中,新建key,名字为Debug Print Filter ,然后在此key下新建一个DWORD value ,名字为DEFAULT,然后设置值为0x00000008,重启电脑后会生效。

3、EzDriverInstaller加载的是以前的sys,解决方案:初次加载会形成备份,以后再次加载会先看是否有备份,删除原先的备份,一般在C盘(这个是WDM驱动)

0 0
原创粉丝点击