📄 驱动程序开发工具简介.txt
字号:
驱动程序开发工具简介
作者: znsoft
工欲善其事必先利其器。
古人说得好。我们不管做什么工作,都需要称心如意的工具。打仗要用刀、枪、炮什么的,砍柴要用山刀(一种山区用来砍柴的刀具),吃饭要用筷子,那我们开发驱动程序要用什么工具呢?很自然地,我们会想到编译器。是呀,没有编译器空有源码也没用。但最主要的还不是编译器,而是各种辅助开发工具。这些工具主要用于简化相关的开发,以便快速或方便地生成我们所需要的驱动程序。
限于笔者所知有限,只能介绍以下几种:
我们把它们分为以下类来介绍:
源码辅助生成工具:
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自带的帮助文档。
二、VTOOLSD
VTOOLSD是由CompuWare公司出品的一款VXD辅助开发工具。它包含一套功能强大的驱动开发基础类库,提供了对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端口的虚拟化。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -