原帖:http://techird.blog.163.com/blog/static/1215640362011112385241568/


本文描述了如何使用Visual Studio+VMMare+VisualDDK来创建、编译和调试你的第一个驱动程序。本文提供在开发和调试工具的环境下详细的操作步骤,而无需太多的关心这些环境背后所做的事情。

本教程我们会创建以下驱动测序并且在虚拟机上测试它:

· 一个超级简单的驱动,加载时打印一条信息

如果你有另外一台实体机,你就不用安装虚拟机了。不过,你可能需要COM连接或者一个火线连接两台机子。


必备软件

开始写驱动之前,你需要准备一些软件(点击超链接直接下载)。

VMWare:虚拟机软件,用于运行用于调试的虚拟机。

Windows安装镜像,用来给虚拟机装系统。建议使用XP或Windows7(如果你内存大一点,建议Windows7)。要是没有你可以找人 拷或者到msdn.itellyou.cn下载

Visual Studio 2010:用来写代码

Windows Driver Kit (WDK) 7.1.0:用于Windows驱动开发的工具包

VisualDDK:将WDK和VS结合配置好的一个可视化VS插件


准备工作

· 第一步--安装虚拟机软件。这个过程很简单,只需要按照步骤一步一步来。

· 然后是创建一个虚拟机,以VMWare Workstation 8为例。

o 点击File-New Virtual Machine

o 选择Custom(advanced)

o 硬件兼容性无所谓,如果你用最新的VMWare,选择Workstation 8.0

o 选择操作系统:这里选择你的操作系统镜像
 

o 然后填写虚拟机操作系统的个人资料(Windows7的话密钥可以不填)

o 然后是设置CPU和内存,默认的就可以。

o 选择网络设置,Bridge或者NAT都可以

o IO设置默认,磁盘创建新的磁盘文件

o 最后点一下Finish,会自动安装操作系统,等其装好(太扯淡装Win7用了10分钟)。

第二步--在虚拟机上安装支持软件并创建快照。

o 如果使用自动安装系统的方式,系统安装好后,会自动安装支持工具

o 手动安装的方式是点击菜单VM-Install VMware Tools,安装一步步跟着向导就行了。

o 给干净的系统创建一个快照。点击菜单VM-Snapshot-Take Snapshot,快照名字叫干净系统之类的。然后点Take Snapshot

第三步--安装Visual Studio 2010,装过了就跳过。不过要注意的是,你的VS要至少包括C++和C#两个模块,如果不全,请重新安装。

· 安装VAX(可选)。VAX只是要来方便你写C++代码的。

第四步--安装32位的Windows调试工具(DDK)。

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

第五步-- 安装和配置VisualDDK

o 双击"VisualDDK-1.5.6.exe"开始安装DDK

o 装完(很快)之后,会出现一个配置向导。如果你按照上面的步骤安装,那么WDK位置和DDK位置会自动识别,直接点下一步。

o 然后会让你选择VS的版本,如果你已经装有VS,它也会自动识别。

o 点Finish开始进行物理机的配置(可能会自动启动VS,不要动它,会自动关闭)。

第六步--配置虚拟机

o 网络配置。依次选择菜单VM-Settings,打开配置页。选择Network Adapter,将配置改为Bridge或者NAT。

然后测试你的网络连接,主机ping虚拟机,虚拟机ping主机应该能互通。

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

o 点击安装,提示重启(虚拟机),点是就可以了。重启后,关闭虚拟机(没错,关掉它)。


使用向导创建驱动

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

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

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

3. 选择一个Pnp的驱动,其他配置默认

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

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

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

3. 如果不需要调试,运行该sys文件就可以使用驱动了(安装方式你得自己研究)。下面介绍调试的方法(调试会自动帮你安装驱动程序)。


调试你的驱动

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

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

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

· 进入目录"%USERPROFILE%\AppData\Roaming\VirtualKD"

· 将里面的*.vmpatch文件删除

· 重试上面的步骤

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

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

选择好你的调试工具的目录(如上,需要32位的调试工具)和符号目录(调试符号,到时候会自动下载到该目录)

· 设置好VisualDDK后,应该会弹出调试设置对话框

选择Virtual Machine的调试方式,此时,应该可以选择已经加载管道的虚拟机了。其他使用默认配置(如果你手动指定了虚拟机的IP,最好再这里填写),配置好之后,点Launch。

1. 点击Launch之后,你应该可以看到一个连接对话框,这个时候点Detail可以看到以下信息。它在等待虚拟机启动。

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

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

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

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

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

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

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

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

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

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

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

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

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

11. 要结束调试,记住点击"调试"-"结束调试"。

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

13. 调试情况:

问题收集

1. 调试菜单下没有VisualDDK的相关菜单项。

此时你可以试试打开我的文档,把Visual Studio 2010目录底下的Addins文件夹删掉再重装VisualDDK。如果还不行,你可以试试把整个Visual Studio 2010目录删掉(注意备份你以前的工程)

2. 没法连接到我的VMWare虚拟机

正确的步骤是,在VMWare启动时,将界面停留在os 选择这里,然后点击Driver Launch Settings,设置好,然后点击Launch,然后在VMWare里进入系统。经过这样的步骤后,虚拟机系统里的驱动,才可以被正常的调试。

如果你在VMMon看到的"指示图标"不是绿色的,你需要删除%USERPROFILE%\AppData\Roaming\VirtualKD下的*.vmpatch文件

3. 本文参考地址:

· http://articles.sysprogs.org/visualddk/firstdriver/ (Making your first driver - complete walkthrough)

· http://debugman.com/thread/5729/1/1 (VS 2010 + Visualddk + VMWare调试驱动要点)

· http://forum.sysprogs.org/viewtopic.php?f=4&t=587 (VS工程目录包含空格不能生成的问题)

【转载】VS2010+VMWare8+VisualDDK1.5.6 创建并调试驱动程序 - 完全教程的更多相关文章

  1. VS2010+VMWare8+VisualDDK1.5.6 创建并调试你的第一个驱动程序 - 完全教程

    本文描述了如何使用Visual Studio+VMMare+VisualDDK来创建.编译和调试你的第一个驱动程序.本文提供在开发和调试工具的环境下详细的操作步骤,而无需太多的关心这些环境背后所做的事 ...

  2. 转载:MySQL 语句大全:创建、授权、查询、修改等

    本文转载>这里 一.用户创建.权限.删除 1.连接MySql操作 连接:mysql -h 主机地址 -u 用户名 -p 用户密码 (注:u与root可以不用加空格,其它也一样)断开:exit ( ...

  3. VS2010使用c++、gSOAP创建WebService 图文教程

    VS2010使用c++.gSOAP创建的WebService 图文教程 环境 操作系统:Windows 7gsoap版本:2.8.32C++编译器/开发环境:Visual Studio 2010 gS ...

  4. PL/Sql 中创建、调试、调用存储过程

    存储过程的详细建立方法 1.先建存储过程 左边的浏览窗口选择 procedures ,会列出所有的存储过程,右击文件夹procedures单击菜单"new",弹出 template ...

  5. C# Windows Service服务的创建和调试

    前言 关于Windows服务创建和调试的文章在网络上的很多文章里面都有,直接拿过来贴在这里也不过仅仅是个记录,不会让人加深印象.所以本着能够更深刻了解服务项目的创建和调试过程及方法的目的,有了这篇记录 ...

  6. 如何创建测试程序调试nginx数据结构

    如何创建测试程序调试nginx数据结构 由于在学习nginx的过程中遇到很多数据结构,往往我都想写一个程序来跑一下,看下到底返回什么.最开始想的方法是使用nginx make 完成之后的.o文件,做L ...

  7. Redis创建高可用集群教程【Windows环境】

    模仿的过程中,加入自己的思考和理解,也会有进步和收获. 在这个互联网时代,在高并发和高流量可能随时爆发的情况下,单机版的系统或者单机版的应用已经无法生存,越来越多的应用开始支持集群,支持分布式部署了. ...

  8. Delphi插件创建、调试与使用应用程序扩展

    Delphi插件创建.调试与使用应用程序扩展 翻译 : MiracleZ  有没有使用过Adobe Photoshop?如果用过,你就会对插件的概念比较熟悉.对外行人来说,插件仅仅是从外部提供给应用程 ...

  9. Xamarin.Forms移动开发系列2:创建和调试

    摘要 本文将介绍如何通过VS2019创建Xamarin.Forms应用程序,以及如何进行调试. 前言 本文介绍Xamarin.Froms应用程序的创建和调试. 开发环境 1.Visual Studio ...

随机推荐

  1. Duanxx的STM32学习:STM32下载方式选择

    前几天熟悉了STM32的启动方式.主要由Boot0和Boot1设置 如今须要解决的就是STM32的下载的问题. 一開始的时候,我选择的是SWD下载.这样的下载方式须要Boot0=0.Boot1=0.占 ...

  2. cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第七步---英雄要升级&属性--解析csv配置文件

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦.他说:随便写,第一别全然照搬代码:第二能够说 ...

  3. JS中的逻辑哲学

    1.幻灯片播放. 有重用功能的代码要封入一个函数内,尽量减少调用出口(一般传入的参数为索引值),以便调用: 计数器放在最终调用的函数那里,index++: 明确那部分函数执行什么功能,将代码块只放在相 ...

  4. js实现form表单提交,图片预览功能

    代码如下 <html> <head> <meta http-equiv="Content-Type" content="text/html; ...

  5. jQuery Tags Input Plugin 插件的使用

    一个jquery开发的标签功能加强插件,可以生成或删除标签,还能对输入重复标签进行检查,和JQuery autocomplete插件配合实现自动完成功能. 官网:http://xoxco.com/pr ...

  6. javascript - 工作笔记 (事件四)

    在javascript - 工作笔记 (事件绑定二)篇中,我将事件的方法做了简单的包装,  JavaScript Code  12345   yx.bind(item, "click&quo ...

  7. HCE:Host-based Card Emulation基于Android设备的卡片模拟器

    HCE技术支持提供了一个软实现SE的通路,Service实现的方式很多,可以使用文件,使用网络,甚至连接真正的SE.支持HCE的测试手机:目前可以确定使用了NXP PN547作为CLF的NFC手机已经 ...

  8. 开源语音识别系统 Simon

    http://www.lupaworld.com/proj.php?mod=view&cid=&id=824 语音识别系统 Simon:Simon 是一个开源的语音识别系统,它不仅可以 ...

  9. Codeforces 286E

    #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> # ...

  10. POJ 1182 食物链(并查集拆点)

    [题目链接] http://poj.org/problem?id=1182 [题目大意] 草原上有三种物种,分别为A,B,C A吃B,B吃C,C吃A. 1 x y表示x和y是同类,2 x y表示x吃y ...