jacksec163
驱动牛犊
驱动牛犊
  • 注册日期2005-03-29
  • 最后登录2008-06-06
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:7035回复:20

驱动程序开发工具简介

楼主#
更多 发布于:2005-03-29 11:27
驱动程序开发工具简介

源码辅助生成工具:
VXDWriter 、 Vtoolsd、DriverStudio 、 WinDriver
调试工具
Soft-ice、 Trw2000 、WDeb386

一、源码辅助生成工具

(1) VXDWriter

VXDWriter 由印度TECHSOFT PVT公司开发,目前最新版本为2.0,一般用户可以在http://www.techsoftpl.com下载演示版,在驱动开发网可以下载1.01“特别”试用版(只能用于学习与研究目的,切勿用于商业开发)。 以下为主界面图: 给人的第一感觉很象….很象VTOOLSD吧。 VXDWriter配套的工具 DbgTerm用来显示VXD驱动输出的高度输出信息。它的地位就相当于Vtoolsd中的Debug Monitor。 VXDWritre是一个基于c/c++语言的Windows98/95 VXD驱动程序开发工具。你可以使用本工具用完全的c/c++语言开发VXD驱动程序而不需要嵌入一丁点的汇编语言程序。当优化选项打开时,生成的VXD驱动程序的代码效率和二进制代码大小不比用纯汇编语言生成的逊色。使用这个工具你能大大减少开发和维护vxd驱动程序的开消。 VXDWriter较之使用98/95DDK的优势在于以下几点: 1. 只需要输入很少的信息就可以生成VXD驱动程序的框架。 2. 运行库使你很容易地处理回调函数、中断仿真、内存管理、串和内存操作、调用32位用户态动态库(32-bit DLLs in application-time)、浮点操作等等。 3. 包含超过620种附加的VXDs服务包装函数,因此你可以在你用c/c++写的VXD驱动程序中调用任何的VXD服务。 4. 高度优化的VXD基础类库,允许你在c++中充分运用面象对象技术而不损失任何性能。 5. 允许你在vc++的集成开发环境中开发VXD驱动程序 ,你可以充分享受它带给你的便利,如文件导航,语法高亮,F1快速唤出帮助系统等等。 6. 集成98ddk的帮助文件,你可以在VC++6.0的集成环境中用F1键调用这个组合帮助系统。 7. 提供了各种各样详尽的例子。 8. 包含调试信息监视工具,帮助你调试VXD驱动程序。 9. 随本工具提供运行库的源代码。 10. 90天免费Email技术支持。 当然,最后两项是在你注册本软件后才能得到的。 软件系统需求: 要用VXDWriter开发VXD驱动程序,你需要运行Windows95(任何版本)或 Windows98(第二版)操作系统之中的任何一个,并需要以下工具: MS Visual C++ compiler 5.0/6.0. Windows 95/98 DDK. 至少5M的剩余磁盘空间以安装VXDWriter2.0。 如果你使用的是Windows95操作系统,你还需要platform SDK(平台SDK)中的16位资源编译器。但本系统推荐使用Windows98操作系统和VC++6.0编译器,Windows98DDK作为后续版本已经包含了更新后的头文件和帮助系统。VXDWriter的帮助系统中已经集成了Windows98 DDK的帮助文件。 调试器可以用windows 98DDK中包含的WDEB386,或商业版本的Soft-Ice for Win32或国内的Trw2000。 具体使用方法请参见VXDWriter自带的帮助文档。

(2)Vtoolsd3.0

能强大的驱动开发基础类库,提供了对VXD编程的全线C++类库支持,将各种功能抽象成相应的类,让你充分享受面向对象带来的各种好处。 以下我们以Vtoolsd3.0版本来介绍它。Vtoolsd3.0版工具包括一套驱动开发C++类库、QuickVXD快速向导、Debug Monitor、VxdView和相应的联机帮助系统。 QuickVXD 你只需要在其中填写很少的信息就可以生成VXD驱动程序框架。看看它是不是和VXDWriter相似呢?实际上是VXDWriter模仿它的界面。它的具体使用我们已经在以前的文章《VXD开发技术》中作了介绍。 VXDView VXDView用来查看系统中已经加载的VXD驱动的相关信息。左边的窗口是已经加载的VXD驱动程序。看到的名字就是我们在VXD开发阶段填写的设备名。参看上面,也就是我们写入 “Device Name”框中的 文字,如果上面的VXD驱动程序开发完毕加载后,将在VXDView的左边窗口中显示”SAMPLE01”字样。驱动程序的设备名只能是字母开头,并且只能是最多八个字符,命名规则和c语言相似。 使用上面的工具可以看到系统中加载的所有VXD驱动。 图中所显示的是叫“VMM”的虚拟设备驱动程序的信息。它的全称叫“虚拟机管理器”。它本身也是一个VXD驱动程序。 VMM是所有VXD的调度中心,它本身与设备无关,负责建立一个虚拟化物理设备的框架,并创建和管理各个VM(虚拟机),VMM还是VM与VxDs之间的通信联络者。VMM提供很多服务例程可供VxDs使用,包括有调度服务、时间服务、页面管理服务、VM管理服务等,功能非常复杂。 DebugMonitor用于显示驱动程序中的输出信息,如果看过本专栏上一篇文章的读者一定记得最后写的那个简单的VXD驱动程序,它在Debug Monitor中输出一串字符。这些字符只能在Debug Monitor或Soft-ICE中才能看得到。当驱动程序开发完毕时要去掉这些调试信息的。 VTOOLSD运行库 Vtoolsd C++类库提供在C++中开发VXD的面象对象的框架支持。这套类库提供基于类的对虚拟机管理器和VXD服务的访问,通过设计的一套附加类库提供的新特性来简化普通VXD驱动程序的开发任务。 框架类 VDevice Vdevice类为虚拟机框架类,是所有虚拟机的基础类。所有的虚拟机类必须从本类派生出来。它处理一般以虚拟机消息,如虚拟机加载,虚拟机卸载等等。 VThread 本类处理所有与线程有关的控制消息。若所创建的VXD驱动程序对特定线程的创建、终止等情况感兴趣,就必须创建VThread的派生类并重载其相关成员函数。 VVirtualMachine 有一些控制消息是针对特定的虚拟机的,如VM_INIT、VM_SUSPEND等。这些控制消息的处理需要在类VVirtualMachine的派生类的成员函数中进行。 事件处理型类 Direct Memory Access (DMA) 提供对DMA的管理功能。DMA是直接内存存取。即不通过CPU进行数据传输。在Windows平台上,VM之间必须共享DMA,DMA设备驱动程序(VDMAD)提供一个虚拟的DMA控制器使得共享DMA成为可能。 Event Processing (一组类的结合) VXD驱动大部分工作是处理各种类型的事件。根据具体服务要求,在VXD中捕捉中断、捕捉I/O端口或者捕捉页面错误。VMM提供的服务很大部分是在这些事件发生时及时地通知相应的VXD作出反应。 包含对各种事件的处理的类: VDeviceAPI:许多VXD采用V86API调用入口和PM API调用入口给ring3层的程序提供服务。有些时候需要拦截ring3层程序对这些入口函数的调用,从而达到监视调用入口、提高程序某些性能的目的。 另外还有以下类: VEvent 提供对异步事件的处理。 VGlobalEvent 提供对全局异步事件的处理。 VVMEvent 对特定虚拟机的事件的处理。 VAppyTimeEvent 提供VXD在异步事件中对ring3层函数的调用管理。 本类还有其它一些不常用的类。 Faults (一组类的结合) VInvalidPageFault 使页失效不被系统处理。 VNMIEvent 不可屏蔽中断事件处理。 VProtModeFault 保护模式失效发生事件处理。 VVMMFault VXD级(ring 0层)失效发生事件处理。 VV86ModeFault V86模式失效发生处理。 VV86Pages V86模式指定地址空间页失效事件处理。 Interrupts (一组类的结合) VHardwareInt 类 提供对某个IREQ端口的虚拟化。 VSharedHardwareInt 类 与前一个类相似,不同的只是它的成员函数将返回一个布尔变量标识任务是否完成。 VinChainInt 类 允许你安装一个应用级函数作为中断处理函数。 VInChainV86Int 类 你可以用它处理V86模式的中断。 VinChainPMInt 类 你可以用它处理保护模式的中断。 VPreChainV86Int 类 本类在V86模式程序的软中断调用中前插或者后插一个调用函数。 TimeOuts (一组类的结合)] VXD驱动可以利用本类实现在指定的时间期限到期以后,系统给VXD一个超时事件通知。 包括以下类: VAsyncTimeOut 提供异步中断记时服务。 VGlobalTimeOut 记时期限只与系统时钟相关。 VTimeOut 它是其它记时类的基类。 VThreadTimeOut 它提供的记时只与指定的线程的累计运行时间有关。 VVMTimeOut 它提供的记时期限只与特定的VM的运行时间有关。 VHotKey 你可以用它捕捉指定的键盘事件。 VI/O Port 提供实现某个端口虚拟化的功能。 其它类型的类 内存管理和存储类(一组类) 提供对内存管理的功能。 VGlobalV86Area 虚拟机地址空间前一兆内存的分配对象的基类。 VLockedPageObject 内存分配并将此内存锁定的基类。 VPageBlock 分配一系统线性地址连续的已提交的页内存块。 VPageObject 如果一个对象要占用4kb以上的内存,它就应该派生本类,它将重载 new和delete操作符。 VV86Pages 本类提供在内存的第1个1M字节里连续的页内存块。 管道类 实际开发中,通常需要在两个VM之间传递数据。其中的一个方法就是使用管道。管道是建立在先进先出基础上的,它通过读写方法在VM之间传输数据。 同步对象类 (一组类) 同步对象类能够在不能及时获得系统资源时阻塞线程或者阻塞VM的执行,直到系统资源能够获得为止。 包括: VSemaphone 只是简单地封装了VMM的semaphore服务,在win32下当需要访问特殊资源或限制访问一段代码的线程数量时,它非常有用。 VMutex 提供VMM的互斥对象的服务。 VId 功能与Semaphone相似,速度比它快。 VCallbacks (一组类) Ring3应用程序可以通过回调用函数类调用VXD中的函数。 VComm Windows9x支持以VCOMM虚拟机为中心的通信联络。 本类包括通信端口类和端口驱动类。 VRegistryKey 提供在VXD中对注册表的操作能力。

(3):DriverStudio
DriverStudio是CompuWare公司出品的一套Window下的全套驱动开发工具集。 DriverStudio 能加速开发,调试,测试,调整和配置你的VXD,WDM和Windows NT驱动程序。DriverStudio 把高质量的工具和现代的软件工程实践带到了以前被忽略的驱动开发领域。 DriverStudio包括以下工具: 工具 描述 支持平台 DriverWorks DriverWork用于辅助Windows8,Windows ME,Windows NT 4.0 和Windows 2000驱动程序的开发。DriverWork的特色是革命性的向导自动生成设备驱动源程序。 Windows 98 (WDM)Windows Me (WDM)Windows NT 4.0Windows 2000 VTOOLSD VTOOLSD设备驱动开发工具包含用c/c++开发Windows 3.1、Windows9x的VXD所需要的文档,向导,库和例子程序。QuickVxd在整个开发过程中伴随着你。 Windows 3.1,Windows 95Windows 98 (VxD)Windows Me (VxD) DriverNetworks? DriverNetworks?设计来用于网络驱动程序开发。DriverNetworks?是一套捕获NDIS对象模型到一组简洁的类的c++类库,并且提供一个快速,高效,且面象对象的方式来写NDIS内核模型驱动的的框架。 Windows 95Windows 98Windows Me Windows NT 4.0Windows 2000 DriverAgent DriverAgent提供Win32程序直接存取和控制硬件的能力。你可以用它快速地生成一个用于硬件测试的驱动原型,独立的诊断包减少相关设备驱动的复杂性,兼有编程简单,性能接近本地驱动的最终用户应用程序在很少的时间内就能完成。 Windows 95,Windows 98,Windows Me,Windows NT 4.0, Windows 2000 SoftICE SoftICE提供超越传统Windows SDK/DDK工具能力的强劲特性来减少调试时间。SoftIce独特的宽范围系统察看和控制能力使它很容易定位和诊断很多种类的Windows软件问题。 Windows 95,Windows 98,Windows Me,Windows NT 4.0, Windows 2000 DriverWorkbench DriverWorkbench提供易于多种设备驱动开发,测试和调试的能力。包括崩溃分析,FieldAget配置,BoundsChecke事件查看器,基于TrueTime 驱动开发版的性能分析。 Windows 95,Windows 98,Windows Me,Windows NT 4.0, Windows 2000 BoundsChecker Driver Edition BoundsChecke驱动开发版本可以查看系统内核的所有调用。另外可以探测参数错误,BoundsChecke保留一个选定的驱动程序所作操作的记录。这个记录可用于SoftIce和Driver Workbench。 Windows 9x,Windows NT 4.0,Windows 2000 TrueTime 驱动开发版 TrueTime是一个帮助你找到并修复你的驱动程序性能瓶颈的性能分析工具。 Windows NT 4.0,Windows 2000 TrueCoverage 驱动开发版 TrueCoverage驱动开发版是一个帮助你发现你的驱动代码中哪部分已经测试,哪部分仍然需要测试的工具。 Windows NT 4.0, Windows 2000 FieldAgent FieldAgent是一个帮助你解决驱动程序棘手的微小问题的工具。它允许你发送一个包含配置信息的BoundsChecker驱动开发版的可再分发版本给你的顾客。捕获的数据可以发回给你以便用DriverWorkBench作分析。

(4):Windriver
WinDriver是一个用于驱动开发的工具包,它将很难的开发任务变得非常轻松。看看它的提示屏幕就可见一般: 它只适合用于开发纯硬件驱动,并且它自动探测插在机器上的硬件的参数。最重要的一点是它的跨平台特性。你在Windows开发的驱动程序不需要作任何修改就可以用于Windows9x,WindowsNT,WindowsCE,Solaris,Linux等系统。 无论您是一位有经验的设备驱动开发者,还是初学者,WinDriver都会使硬件访问变成一件很容易的事。在常规开发环境下,使用WinDriver,您可以在很短的时间内完成访问IO端口和存储区域,处理中断,执行DMA操作及访问PCI和自定义寄存器的工作。这种易用性是通过一个非常强大的组合向导来实现的。这个向导通过一个非常强健的API来分析硬件,自动产生驱动程序代码。您可以在用户模式下使用这个API,这样就不需要学习操作系统的内部原理和内核API(DDK)。 它包括一个功能强大的硬件探测器和调试器。在写入一行代码前,通过一个图形界面,硬件调试器能够对硬件进行全面的测试。这种方式能够使您在写您的驱动程序前,校验硬件是否按照期望的那样工作。 你可以用它自带的WDDEBUG来手工调试你开发的驱动程序,这个工具位于\\windrvr\\util 目录下。

二、调试工具

SoftIce
CompuWare出品的一个超强调试工具。可运行在Windows9x,Windows NT,Windows 2000平台下。 Trw200 国人编写的一个调试工具,目前只能调试Windows9x下的VXD,并且它本身也只能在Windows9x下运行。优点是可以动态加载(SoftIce只能随操作系统的加载而加载,但稳定性很好)。 WDEB386 微软DDK工具包中自带的调试工具,相信见过SoftIce的开发者一定会将它从硬盘上删除。但在没有其它工具时也只能用它了。

三、驱动程序的编译

你可以用DDK中带的Build实用程序,但笔者推荐使用VC++集成环境作编辑与编译。DriverStudio自动与已经安装的VC++集成在一起。

四、工具的获得 作为研究与学习目的,你可以去它们各自的公司站点下载试用版本,当然你也可以到驱动开发网(http://www.driverdevelop.com)下载除VC、DDK外的所有工具。 (本文发表于《程序春秋》杂志)

 

最新喜欢:

mykaomykao
xbzjackey
驱动小牛
驱动小牛
  • 注册日期2002-12-27
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望34点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-30 09:33
多谢
回答好的不要忘了给分哦。。。
lijianfei77
驱动牛犊
驱动牛犊
  • 注册日期2005-03-26
  • 最后登录2007-09-11
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-02 12:40
ding!
handong_0111
驱动牛犊
驱动牛犊
  • 注册日期2007-03-09
  • 最后登录2007-03-28
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-03-23 10:05
ding!
zjl_1026
驱动牛犊
驱动牛犊
  • 注册日期2007-07-16
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-07-17 08:09
顶一下 感谢中
wanghui219
禁止发言
禁止发言
  • 注册日期2007-08-28
  • 最后登录2019-07-29
  • 粉丝4
  • 关注3
  • 积分101166分
  • 威望505351点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分4分
  • 社区居民
5楼#
发布于:2007-09-07 15:33
用户被禁言,该主题自动屏蔽!
kgdurgwu
驱动牛犊
驱动牛犊
  • 注册日期2007-06-24
  • 最后登录2008-09-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-09-12 00:43
  支持一下
 不过工具太多了  对新手来说有点困惑
到底要用哪个好那    大家建议一下 thx
zhenkui2008
驱动牛犊
驱动牛犊
  • 注册日期2005-07-05
  • 最后登录2008-06-26
  • 粉丝0
  • 关注0
  • 积分260分
  • 威望27点
  • 贡献值0点
  • 好评度26点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-04-10 09:19
谢谢
ladanminyi
驱动牛犊
驱动牛犊
  • 注册日期2008-04-24
  • 最后登录2008-05-19
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-05-19 10:37
抗震救灾,谢谢!
axinaim9
驱动牛犊
驱动牛犊
  • 注册日期2008-04-28
  • 最后登录2008-06-17
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2008-06-05 09:33
很长知识!谢谢楼主!
不混
驱动牛犊
驱动牛犊
  • 注册日期2008-06-14
  • 最后登录2008-07-03
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2008-06-19 11:43
顶起
技术--是学来用的!
oc.zgike
驱动牛犊
驱动牛犊
  • 注册日期2008-06-24
  • 最后登录2008-06-25
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2008-06-25 11:36
新手多谢
xixuer
驱动牛犊
驱动牛犊
  • 注册日期2008-06-26
  • 最后登录2010-05-05
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望275点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2008-06-27 19:08
谢谢楼主!辛苦了……
《恋-爱-惜》
sqb0510
驱动牛犊
驱动牛犊
  • 注册日期2008-11-18
  • 最后登录2008-12-01
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2008-11-21 11:57
xuexi !!!
lihaixiao_83110
驱动牛犊
驱动牛犊
  • 注册日期2009-02-09
  • 最后登录2009-02-25
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望311点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2009-02-13 23:35

感谢
zhangjiwang
驱动牛犊
驱动牛犊
  • 注册日期2009-03-17
  • 最后登录2009-03-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2009-03-19 20:33
谢谢
yuyinxl
驱动牛犊
驱动牛犊
  • 注册日期2009-04-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分38分
  • 威望361点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2009-06-15 11:21
   
popeylj
驱动牛犊
驱动牛犊
  • 注册日期2009-06-10
  • 最后登录2011-03-01
  • 粉丝0
  • 关注0
  • 积分98分
  • 威望121点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分1分
17楼#
发布于:2009-09-13 16:46
比较老了,而且也不全啊
xinjie1023
驱动牛犊
驱动牛犊
  • 注册日期2008-06-29
  • 最后登录2010-05-26
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望201点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2009-09-26 21:11
还有iptrace等
liucsfan
驱动牛犊
驱动牛犊
  • 注册日期2009-02-23
  • 最后登录2010-01-12
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望231点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2009-11-06 09:58
好,顶顶!
上一页
游客

返回顶部