<b>虚拟设备驱动程序的计划与实现</b>[VC/C++编程]
本文“<b>虚拟设备驱动程序的计划与实现</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
由于Windows对系统底层操作采纳了屏蔽的战略,因而对用户而言,系统变得更为安全,但这却给众多的硬件大概系统软件开辟人员带来了不小的艰难,因为只要利用中触及到底层的操作,开辟人员就不得不深化到Windows的内核去编写属于系统级的虚拟设备驱动程序.Win 98与Win 95设备驱动程序的机理不尽相同,Win 98不但支持与Windows NT 5.0兼容的WDM(Win32 Driver Mode)情势驱动程序,并且还支持与Win 95兼容的虚拟设备驱动程序VxD(Virtual Device Driver).下面介绍了基于Windows 9x平台的虚拟环境、虚拟设备驱动程序VxD的基本原理和计划办法,并结合开辟工具VToolsD给出了一个为可视电话音频卡配套的虚拟设备驱动程序VxD的计划实例.
1.Windows 9x的虚拟环境
Windows 9x作为一个完好的32位多任务操作系统,它不像Window 3.x那样依靠于MS-DOS,但为了保证软件的兼容性,Windows 9x除了支持Win16利用程序和Win32利用程序之外,还得支持MS-DOS利用程序的运行.Windows 9x是通过虚拟机VM(Virtual Machine)环境来确保其兼容和多任务特点的.
所谓Windows虚拟机(普通简称为Windows VM)就是指履行利用程序的虚拟环境,它包含MS-DOS VM和System VM两种虚拟机环境.在每一个MS-DOS VM中都只运行一个MS-DOS进程,而System VM能为全部的Windows利用程序和动态链接库DLL(Dynamic Link Libraries)供应运行环境.每个虚拟机都有独立的地址空间、存放器状况、仓库、部分描写符表、中止表状况和履行优先权.固然Win16、Win32利用程序都运行在System VM环境下,但Win16利用程序同享同一地址空间,而Win32利用程序却有自己独立的地址空间.
在编写利用程序时,编程人员常常忽视虚拟环境和实环境之间的差别,普通认为虚拟环境也就是实环境.但是,在编写虚拟设备驱动程序VxD时却不能这样做,因为VxD的工作是向利用程序代码供应一个与硬件接口的环境,为每一个客户虚拟机管理虚设备的状况,透明地仲裁多个利用程序,同时对底层硬件举行拜候.这就是所谓虚拟化的概念.
VxD在虚拟机管理器VMM(Virtual Machine Manager)的监控下运行,而VMM实际上是一个特别的VxD.VMM履行与系统资源有关的工作,供应虚拟机环境(能产生、调度、卸载VM)、负责调度多线程占先时间片及管理虚拟内存等工作.VxD与VMM运行在其他任何虚拟机之外,VxD事实上就是实现虚拟机的软件的一部份.
与大大都操作系统一样,Windows也是采取层次式体系构造.VMM和VxDs构成了Win 95的ring0级的系统核心(利用程序运行在ring3级,ring1、ring2级未被利用),具有系统的最高优先权.Windows还供应一些以"drv"为后缀名的驱动程序,主如果指串行口的通信程序和并行口的打印机程序.这些程序与VxD差别,它们是运行在ring3级上的.
2.深化理解VMM和VxD
如前所述,VxD是Virtual Device Driver的缩写,但有人将它理解为虚拟任何驱动程序.实际上,VxD并非仅指那些虚拟化的某一具体硬件的设备驱动程序.比方某些VxD可以虚拟化设备,而某些VxD作为设备驱动程序却并不虚拟化设备,还有些VxD与设备并没有什么关系,它仅向其他的VxD或是利用程序供应服务.
VxD可以随VMM一同静态加载,也可以按照需求动态加载或卸载.恰是由于VxD与VMM之间的精密合作,才使得VxD具有了利用程序所不具有的本领,诸如可以不受限制地拜候硬件设备、肆意查看操作系统数据构造(如描写符表、页表等)、拜候任何内存区域、捕捉软件中止、捕捉I/O端口操作和内存拜候等,乃至还可以截取硬件中止.
固然VxD利用32位平面存储情势(flat memory model),但它的代码和数据仍利用分段管理,段有六种范例,即实情势初始化、保护情势初始化、可分页、不可分页、静态和只调试(debug only),每种范例又有代码段和数据段之分,所以VxD共有12个段.实情势代码段和数据段为16位(分段情势),其他段则是32位(平面情势).“实情势初始化”段包含了在Windows初始化历程的最初阶段VMM变成保护情势之前要履行的代码.静态加载的VxD此时可以查看Windows启动前的实情势环境,决意能否持续加载,并告诉VMM.加载完毕后,VMM进入保护情势并履行保护情势初始化代码,一样将履行后果再告诉VMM.初始化完成后,“实情势初始化”段和“保护情势初始化”段即被抛弃.VxD的大部份代码都在其他的某一段中,“可分页”段答应虚拟存储管理器(Virtual Memory Manager)举行分页管理,大大都的VxD代码都该当在“可分页”段.“不可分页”段的内容主要包含:VxD的主进口点、硬件中止处理函数、所拜候的数据以及能被另一个VxD中止处理函数调用的异步服务.“静态”段仅用于可以动态加载的VxD,当VxD卸载后,静态代码段和数据段都保存在内存中.“只调试”段只是VMM在Soft-ICE for Win 95等调试环境下才将其载入.
VMM是通过VxD的设备描写符块DDB(Device Descriptor Block)来辨认的.DDB向VMM供应了VxD的主进口点,还向利用程序和其他的VxD供应了进口点.VMM操纵这个主进口点将VM及Windows自身的状况告诉给VxD,然后VxD通过呼应的工作来呼应这些事件.由于VxD不但仅服务于一个物理设备(比方多个串口)或仅与一个VM发生接洽,所以VxD需求产生自己支持的数据构造(Supporting Data Structures)来保存每一个设备、每一个VM的配置和状况信息.VxD用一个或多个设备上下文构造来保存设备信息,如I/O端口基地址、中止向量等,VxD将自己的每个VM的状况信息保存在VMM的VM掌握块中.
VMM供应的服务包含:事件服务、内存管理服务、兼容履行和保护情势履行的服务、登录表服务、调度程序服务、同步服务、调试服务、I/O捕捉服务、处理错误和中止服务、VM中止和回调服务、配置管理程序服务以及其他杂项服务.
以上内容仅触及到VxD计划的一小部份,作为VxD的开辟人员必须掌握更多的知识.首先是操作系统的知识,如地址空间、履行上下文、资源加锁、进程间通信和异步事件处理等方面的知识;其次,对Intel处理器应有较深化的理解,包含存放器、机械指令集、保护机制、分页机制,以及虚拟8086情势;最后,还必须熟习VMM供应的各类服务和接口,熟习Windows其他的系统VxD.
3.开辟工具VToolsD简介
VToolsD是专门用于开辟VxD程序的一种工具软件,它包含VxD框架代码生成器QuickVxD、C运行库、VMM/VxD服务库、VxD的C++类库、VxDLoad和VxDView等实用工具以及大量的C、C++例程.由VC++、BC++的32位编译器编译生成的VxD程序可以脱离VToolsD环境运行.
操纵QuickVxD可以便利、快速地生成VxD的框架,即生成后缀名为h、cpp和mak的三个文件.源文件包含了运行VxD的基本组件,此中包含掌握消息处理、API进口点、以及VxD服务等函数框架,并且还定义了标志,设置了编译参数,声明了类,然后在C++环境下,向生成的各个处理函数体内增添自己的代码,最后利用编译器NMAKE生成尺度的VxD程序.
由于VxD运行在ring0级,所以调试程序相当艰难.我利用的调试工具是Soft-ICE for Win 95.
目前VToolsD的最新版本为3.0,它支持设备拜候体系构造DAA(Device Access Architecture),所编写的程序代码将可以在全部Windows平台(包含Win 95、Win 98以及Windows NT)上同享.当然也可以利用Microsoft公司的DDK(Device Developer Kit)来开辟VxD,但DDK不能像VToolsD那样通过屏蔽系统及VxD的底层技术细节供应丰富的C运行库和C++类库,而是让开辟人员充分享用面向对象编程办法的便利与快速,因此仅就该点而言,利用DDK是不便利的.
以上是“<b>虚拟设备驱动程序的计划与实现</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |