






















本文描述了如何使用Visual Studio+VMMare+VisualDDK来创建、编译和调试你的第一个驱动程序。本文提供在开发和调试工具的环境下详细的操作步骤,而无需太多的关心这些环境背后所做的事情。如果你想学习更多驱动程序开发的API,可以参考 Online WDK help。
本教程我们会创建以下驱动测序并且在虚拟机上测试它:
如果你有另外一台实体机,你就不用安装虚拟机了。不过,你可能需要COM连接或者一个火线连接两台机子。
开始写驱动之前,你需要准备一些软件(点击超链接直接下载)。
如果你不知道ISO镜像怎么使用,下载一个UltraISO然后去找下相关用法。
然后是创建一个虚拟机,以VMWare Workstation 8为例。
在虚拟机上安装支持软件并创建快照。
安装VAX(可选)。VAX只是要来方便你写C++代码的。
安装Windows Driver Kit(WDK)。


然后就开始安装了

安装32位的Windows调试工具(DDK)。
在WDK的ISO目录底下找到H:\Debuggers\setup_x86.exe开始安装。完全安装即可。(Visual Studio是一个32位的软件,所以不能使用64位的调试工具)。

安装和配置VisualDDK
配置虚拟机
网络配置。依次选择菜单VM-Settings,打开配置页。选择Network Adapter,将配置改为Bridge或者NAT。


然后测试你的网络连接,主机ping虚拟机,虚拟机ping主机应该能互通。
复制 C:\Program Files (x86)\VisualDDK\target\vminstall.exe 到虚拟机上运行(如果正确安装了VMTools,可以直接复制粘贴的,如果不行,重新安装VMTools或使用VMWare 的网络功能拷贝该文件)。

以管理员权限运行Visual Studio(右击-以管理员权限运行)

点击文件-新建-项目,打开新建项目向导,选择C++下的VisualDDK,

注意:项目位置不可以包含空格,不可以包含中文,否则你会很悲剧(无法生成解决方案)

现在打开你的源代码,看到的应该是以下效果

生成解决方案。选择菜单生成-生成解决方案。

如果没有错误,证明生成成功了。生成成功后,你可以右击项目,点击"在Windows资源管理器中打开文件夹",进入生成目录(如objchk_win7_x86\i386)可以看到成功生成的sys驱动文件。


运行VisualDDK安装目录下的vmmon.exe或vmmon64.exe(如果你是64位系统)。当然,你也可以在开始菜单处搜索到这两个程序。


这时候启动虚拟机,不要进入系统,停在操作系统选择菜单上!此时你的VMMonitor和虚拟机画面应该是这样的:


注意,这步至关重要,如果你看到的PID字段上那个图标不是绿色的,或者说Pipe name没有建立出来,将不能进行内核调试。这个步骤我搞了n久找到了解决方案。如果你有这样的问题,你可以这么做:
进入目录"%USERPROFILE%\AppData\Roaming\VirtualKD"

将里面的*.vmpatch文件删除

VS中选择菜单调试-Driver Launch Settings…

首次调试,会提示你配置Visual DDK(这个操作你也可以通过菜单工具-VisualDDK Settings…进行)

选择好你的调试工具的目录(如上,需要32位的调试工具)和符号目录(调试符号,到时候会自动下载到该目录)
设置好VisualDDK后,应该会弹出调试设置对话框

选择Virtual Machine的调试方式,此时,应该可以选择已经加载管道的虚拟机了。其他使用默认配置(如果你手动指定了虚拟机的IP,最好再这里填写),配置好之后,点Launch。
点击Launch之后,你应该可以看到一个连接对话框,这个时候点Detail可以看到以下信息。它在等待虚拟机启动。

这个时候启动虚拟机(选择VirtualKD调试),启动的时候会为你加载符号。首次加载符号会从符号服务器下载,请耐心等候。

如果有不能加载的符号,VisualDDK会弹出提醒(服务器上没有),问你下次是否跳过这些符号,点OK就行了。

如果虚拟机版本是Vista以上,会跳出一个对话框,问你是否要打印调试信息,选是。

然后,VS此时会进入一个中断。点击调试-继续让内核和驱动继续加载

启动的过程可能相当缓慢,而且VisualDDK的控制台会输出一些错误信息,这是正常的,请耐心等候


如果你的虚拟机成功启动,恭喜你,你基本已经成功了!成功启动后,启动虚拟机上的DDKLaunchMonitor(默认在C盘根目录)。启动后,可以看到虚拟机的IP是192.168.3.105

现在点击VisualDDK控制台上的加载驱动的命令(如果控制台不见了,可以选择菜单调试-窗口-VisualDDK Console调出来)

点击之后,可以看到以下对话框。因为刚才填写调试配置的时候没有填写IP,现在需要重新填写才能跟虚拟机通信。

点击菜单调试-停止调试,重新选择菜单调试-Driver Launch Settings… ,将虚拟机的IP填上。

这次再点击Launch,你能成功连接了。

现在弹出了一个驱动安装的配置向导,使用默认设置,然后点击"Install"

此时看虚拟机,会弹出让你安装驱动程序的对话框,选择"始终安装此驱动程序"

当驱动安装成功,你可以看到,输出的调试信息"Hello from PnpDriver",输出的语句你可以在你的源代码的DriverEntry函数中找到。

下次继续调试,不用重启虚拟机,可以直接使用建立好的管道。下面敲个断点试试。

调试情况:

调试菜单下没有VisualDDK的相关菜单项。
此时你可以试试打开我的文档,把Visual Studio 2010目录底下的Addins文件夹删掉再重装VisualDDK。如果还不行,你可以试试把整个Visual Studio 2010目录删掉(注意备份你以前的工程)
没法连接到我的VMWare虚拟机
正确的步骤是,在VMWare启动时,将界面停留在os 选择这里,然后点击Driver Launch Settings,设置好,然后点击Launch,然后在VMWare里进入系统。经过这样的步骤后,虚拟机系统里的驱动,才可以被正常的调试。
如果你在VMMon看到的"指示图标"不是绿色的,你需要删除%USERPROFILE%\AppData\Roaming\VirtualKD下的*.vmpatch文件
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。