毕业论文-基于Windows98系统的数据采集开发.doc_第1页
毕业论文-基于Windows98系统的数据采集开发.doc_第2页
毕业论文-基于Windows98系统的数据采集开发.doc_第3页
毕业论文-基于Windows98系统的数据采集开发.doc_第4页
毕业论文-基于Windows98系统的数据采集开发.doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

四川大学本科毕业论文 基于win98系统的数据采集开发 基于Windows98系统的数据采集开发(机械设计制造及其自动化专业)学生:唐君山 指导老师:李翔龙摘要:随着科学技术的飞速发展,对数据处理的实时性要求也越来越迫切。,为了获得各种各样的测量结果我们常常借助各种仪表和各种手段,以此来确知某一测试对象的各项特性。数据采集是机床数控和机电控制的基础和关键。在放电加工过程中实现电压的监测,涉及到将模拟的电压信号转化成数字信号,也就是数据采集技术。论文研究关于数据采集系统的驱动程序的开发,讨论了Windows98下开发VXD驱动程序的方法和实例,学习利用VToolsD工具和Visual C+工具开发虚拟设备的驱动程序。通过各种比较展现出使用VToolsD工具和Visual C+工具开发虚拟设备的驱动程序的特点和优缺点,并且进一步设想使用PC-7422 12位32路A/D 100K转换卡在计算机上模拟微进给过程中的电压数据采集过程。利用这一系列技术方法,可以研发出微进给自动系统中的数据采集系统,使之安全有效地投入使用。论文初步论证研究了该方法的可行性和部分操作过程。主题词:数据采集、设备驱动程序、VTOOLS、VXDStudy on data gather base on Window98(Mechanical design manufacture and automation)Student: Tang Jun-shan Teacher: Li Xiang-longAbstract: The request of real time data processing is more and more important because of the improvement of science technology. We always need to use lots kinds of instrument to help us to get the result of measure to ensure the properties of a object. Data Collection is foundation and key of the numerical control of machine tool and machine electric control.This research paper is main about the Driver Development of Data Collection and the method of Driver Develop based on Windows 98 OS using VtoolsD SDk.The paper shows the advantages and disadvantages of Driver Develop using VtoolsD SDk and Visual C+ on virtual device. And it farther assumes using the PC-7422 12bit 32 route A/D conversion card to simulate the process of the voltage data Collection during the tiny motion process. We could research and develop the Data collection flow from microevolution through these serials of methods, to let Data Collection to be used safely and effectively. The Research paper covers parts of the operate of the method and its feasibility.Keyword: data collection, device drivers, VTOOLS、VXD目 录第一章 绪论第一节 数据采集的目的第二节 数据采集的作用第三节 Windows 98的特点第二章 操作系统内核和VXD第一节 Windows Ring0级系统核心第二节 Vxd简介第三节 Vxd特征浅析第四节 Vxd的基本工作原理和调用机制1 VMM及其提供的扩展服务2 Vxd消息处理3 Vxd调用机制第五节 Vxd常用开发工具第六节 Vxd技术的应用1 Vxd的实用用途2 基于VxD的实时反病毒技术第七节 Vxd的局限性第八节 VXD驱动程序与WDM驱动程序开发的比较1 VXD与WDM的差异第九节 使用VT00IJSD开发VXD驱动程序的关键问题第三章 VTOOLSD的应用基础第一节 VTOOLSD简介第二节 环境参数设置问题1 VTOOLSD指定VC编译器路径之问题2 VTOOLSD安装路径之问题3 VxDView工具的起始位置之问题第三节 VTOOLSD的工具程序第四节 Debug Monitor的使用介绍第四章 驱动程序设计第一节 实例学习第二节 程序开发1 PC-7422 12位32路A/D 100K转换卡的基本说明2 程序的编写致 谢参考文献- -第一章 绪论第一节 数据采集的目的只要是解决非电量转换成电量的问题以及多路复用、数据的模拟形式和数字形式之间的转换问题。第二节 数据采集的作用在放电加工过程中,工件不断地被蚀除,工具也有一定的损耗,所以放电间歇将不断增大。必须使工具电极及时进给补偿,否则放电过程势必由于间歇过大而停止。又当电极间歇过小,引起电弧放电或短路时,必须使工具电极迅速离开工件,随即重新调节到所需的放电间歇,由于在正常加工范围内放电间歇及其许可的变动量小,因此人工操作或恒速的“机动进给”是很难满足上述要求的。故必须依靠自动进给机构和自动调节系统来实现。对于自动进给机构和自动调节系统来讲,就是要在放电加工过程中,不但要使工具电极和工件随着工件材料被不断蚀除而相对进给,以形成一定形状和尺寸的工件,而且还要不断调节进给速度甚至停止进给或退回,以保持恰当的放电间歇。因为瞬时蚀除量和放电间歇的物理状态是变化无常的,而且,放电间歇很小,且位于工作液中而无法观察而后直接测量,因此必须通过自动调节进给装置来保持恰当的放电间歇。测量环节就像人的耳目一样,可在加工过程中起到不断了解电极间歇的大小及其变化的作用,人们可根据电极间歇大小的变化来调节加工过程。由于放电加工过程的放电间歇很小,而且在不断地变化,所以直接测量间歇值是很困难的。但放电间歇的大小和放电电压(或电流之间)有一定的内在联系,我们可以测量这些电参数来间接测量间歇值的大小和变化。(4)具体的测量环节可被电极间歇的电压、电流、或电压及电流三种方式取得信号。它们在本质上是一回事。例如,当放电间歇由零变大时,电压信号也由零变大,而电流信号由大变零,两者变化相位相反。所以说采集电压或电流的值就可以间接的测量间歇值的大小。第三节 Windows 98的特点Win9x操作系统以其丰富的图形用户界面,可以实现多任务而得到了广泛应用,在Win9x 上开发数据采集系统教DOS开发平台可获得更高的效率和更友好的界面。第二章 操作系统内核和VXD第一节 Windows Ring0级系统核心VxD是Virtual Device Driver的缩写,它是一种32位保护模式驱动程序,它管理着硬件设备或安装的软件等系统资源,使得多个应用程序可以同时使用该资源。操作系统通过VxD将物理设备虚拟化,截取应用程序对硬件的请求,并向应用程序提供一个与硬件接口的虚拟环境。在这样的多任务环境中,不同的应用程序可以共享相同的物理资源,从而实现多进程并行运行386以上的微处理器有4个优先级:0级、1级、2级、3级一般操作系统运行于Ring0级上,而用户程序运行在Ring3级上(Ringl、Ring2未使用)。VxD运行于Ring0级上,其在内存中的位置也是处在操作系统保护的空间之内的。所有VxD都在虚拟机管理器VMM(Virtual Machine Manager)监控下运行,而VMM实际上是一个特殊的VxD。VMM执行与系统资源相关的工作,提供虚拟机环境(能产生、调度、卸载虚拟机)负责调度多线程占先时间片及管理虚拟内存等工作vxD事实上就是实现虚拟机软件的一部分正是VMM和VxD构成了Windows的Ring 0级系统核心。VMM是通过VxD的设备描述符块DDB(Device Descriptor Block)来识别不同设备的。DDB向VMM提供了VxD的主人口点,还向应用程序和其他VxD提供人口点。VMM利用这个人口点将VM(虚拟机)及Windows自身的状态通知给VxD,然后VxD通过相应的工作来响应这些事件。由于VxD不仅仅服务于一个物理设备(比如多个串口)或与一个VM发生联系,所以VxD需要产生自己支持的数据结构(Supporting Data Structure)来保存每个设备的配置和状态信息。VxD用一个或多个设备上下文结构来保存信息如I/O端口基址,中间向量等VxD将自己的每个状态信息保存在VMM的VM控制块中。(1)第二节 Vxd简介从Intel80386开始的系列微处理器提供了真正的32位运算,并提供了四个特权(Privilege)级即保护级,可在三种模式下工作:实模式、保护模式和V86模式。实模式是MSDOS的运行环境。Windows98只利用了保护模式和V86模式这两种模式,保护模式给我们带来很多优越性,如应用程序不再受1M内存的限制,理论上,在保护模式下,CPU可以进行4096M内存的寻址。windows98仅使用了Ring 0和Ring 3两个保护级。运行于Ring 0的进程,可以拥有系统资源的所有访问权和管理权,而运行于Ring 3的进程只能访问自己的程序空间,不允许对系统资源进行直接访问,很多操作受限,用户级应用程序均运行于Ring 3,不能对硬件和核心级的程序作直接的访问,从而保护了操作系统。有了权限级别,操作系统就有机会在中断和I0操作上产生“虚拟”效果。由于操作系统的权限为0级,它就可以捕获权限不为。级的应用程序的中断和IO请求,然后建立缓冲队列,再一一进行串行处理。因此,那些需要直接对硬件访问的硬件驱动程序就必须在核心级执行。微软把所有核心级的程序一概叫作VxD,VxDVirtua “something” Device,这里的x代表Somethig。如VKD代表Virtual Keyboard Device(键盘驱动),VPICD代表Virtual Programmable Interrupt Device(可编程中断控制器驱动)。为了使开发的应用程序也能直接处理硬件,就需要编写专门的VxD。由于VxD是作为操作系统的组件运行于Ring0,因而可以利用它来捕获特定的硬件操作,完成我们需要的特殊任务。本文仅就Windows 9x中的VxD技术进行深入分桥,并探讨了如何将vxD技术应用到我们自行开发的系统中。第三节 Vxd特征浅析VxD即虚拟设备驱动程序是32位保护方式的驱动程序,用作Windows 9x系统和物理设备之间的接口,负责管理系统的某项资源,如硬件设备或已安装的软件。VxD不仅适用于硬件设备,也适用于按vxD规范所编制的各种软件“设备”。为便于多个应用程序可同时使用该资源,vxD的实质就是运行在Ring 0上的32位动态库,通过加载具有Ring 0最高优先级的VxD,使运行于Ring 3上的应用程序能够以一定的接口控制VxD的动作,从而达到控制系统的目的。所以开发者要使应用软件在Ring 0上运行,获得对系统资源的全部访问权,可通过自行编制的VxD作为访问代理达到目的。VxD的结构包含下面5个段的一些组合:(1)VxD_CODE段:保护模式代码段(必须)。该段包含VxD系统控制过程、回调过程、服务和VxD的API接口函数。该段用宏VxD_CODE_SEG和VxD_CODE_ENDS定义开始和结束,也可命名为_LTEXT。(2)VxD_DATA段:保护模式数据段(必须)。该段包括设备描述DDB(Device Descriptor Block)、服务表和部分VxD所用的全局数据。该段用宏VxD_DATA_SEG和VxD_DATA_ ENDS定义开始和结束,也可命名为_LDATA。(3)VxD_ICODE段:保护模式下的初始化代码段(可选)。该段一般包括只在VxD初始化过程中使用的过程和服务,VMM在初始化结束后即InitCompIete消息发生后丢弃此段。该段用宏VxD_CODE_SEG和VxD_ICODE_ENDS定义开始和结束,也可命名为_ITEXT。(4)VxD_IDATA段:保护模式初始化数据段可选。该段一般包括初始化过程和服务使用的数据,VMM在InitComPIete消息发生后丢弃此段。该段用宏VxD_IDATA_SEG和VxD_IDATA_ENDS定义开始和结束,也可命名为_IDATA。(5)VxD_REAL_INIT段:实模式初始化段(可选)。该段包含实模式初始化过程和数据,VMM在加载VxD其它部分之前调用此过程,过程返回后丢弃此段,该段用宏Vxd_REAL_INIT-SEG和VXD_REA L_INIT_ENDS定义开始和结束,也可命名为_RTEXT。除实模式初始化段以外,所有代码和数据段均为32位平坦内存模式的保护模式段,这就是说定义在保护模式段中的过程和数据均为32位的偏移量。当VMM装载VxD时,按照VxD在内存中的实际位置修正所有的偏移量。因此,在保护模式段中使用普通OFFSET指令处应该使用OFFSET32宏,OFFSET32宏定义的偏移量为连接器确定了正确的偏移量修正信息。VxD不能改变CS、DS、ES和SS段寄存器VxD能够使用FS和GS段寄存器。(1)第四节 Vxd的基本工作原理和调用机制1 VMM及其提供的扩展服务VMM(VircuaI Machine Manager)即虚拟机器管理程序,是在系统级核心运行的32位保护模式操作系统,是操作系统的核心。VMM负责为计算机中运行的所有应用程序和系统进程分配所需资源,主要功能是创建、运行、监控和终止虚拟机。如它提供低级内在管理和调度服务;同时还有对虚拟设备驱动程序的服务。VxD是用来扩展Windwos操作系统功能的一类程序。由于VxD运行在系统的Ring 0级上,拥有与操作系统同等的级别,所以我们可利用它来支持硬件设备的管理。虚拟可编程中断控制器(VPCD)是负责管理所有硬件中断事件的程序,它本身也是一种VxD,能提供缺省的中断处理函数或者允许其它VxD重裁中断处理函数。VMM是存在于DOS386.EXE文件中的VxD。还有许多其它VxD,如即插即用于系统和文件系统驱动程序这种VxD联合体形成了Windows的基本操作系统。在系统初始化过程中,一旦安装了VMM,它就会永久驻留。Windows在基本操作系统中包括700多个服务,其中接近一半服务是由VMM提供的。正常情况下,VMM服务的使用范围包括设备驱动程序、调试程序以及系统级的基本操作系统扩展程序,而且VMM服务的范围覆盖了最低级的操作系统需要,它主要包括:事件服务:它允许VxD用信号通知某个特定线程的事件。IO俘获服务:它为VxD提供一种方式,使VxD与VMM协同管理处理器的IO端口。借助这些VMM服务,VxD能控制对IO端口的访问。中断和回调服务:它把VxD与单个W的软件和硬件中断状态连接起来。例如,vxD能获得和修改设置在特定VM中的当前中断向量。配置管理程序服务:它把VxD与Windows即插即用于系统连接起来。还有如调度程序服务、嵌套执行和保护模式执行的服务及登录表服务等等。每个VxD都定义一个服务表,用于识别该VxD内部函数的入口点,这些函数向别的VxD或应用程序提供服务,VxD的处理对象是VMM发来的控制信息,所以VMM是VxD或应用程序调用VxD时发挥重要作用的核心组件。Windows 9x系统下有众多的VxD,每个VxD可提供4种服务,即PM(保护模式)API、V86(虚拟86)API、WIn32服务和VxD服务,前3种分别供应用程序在16位保护模式、V86模式以及32位保护模式下调用,VxD服务则只供其它VxD使用;用户开发的VxD可提供任意上述服务。除此之外,应用程序还可通过调用API函数DeviceIoContro1与支持IOCTL接口的VxD进行通信,执行Win32API不支持的系统低级操作。2 Vxd消息处理VxD的操作基于寄存器,所以一般用汇编语言编写,它的关键部分是一个和普通窗口的消息处理过程WndProc相类似的控制过程,不同之处在于它的处理对象是系统发来的控制消息。这些消息共51种,在VxD自加载至卸出整个生命周期内,操作系统不断向它发送各种控制消息,vxD根据自己的需要选择处理,其余的忽略。系统向VxD发送控制消息时将消息代号放在EBX寄存器中,并在EBx寄存器中放系统虚拟机(VM)句柄。对动态VxD来说,最重要的消息有三个:SYS_DYNAMIC_DEVICE_INIT、SYS_DYNAMIC_DEVICE_EXIT以及W32_DEVICEIOCONTROL,消息代号分别是lBh、lCh、23h。当VxD被动态加载至内存时,系统向其发送SYS_DYNAMIC_DEVICE_INIT消息,VxD应在此时完成初始化设置并建立必要的数据结构。当VxD将被卸出内存时,系统向其发送SYS_DYNAMIC_DEVICE_EXIT消息,VxD在收到后应清除所作设置并释放相关数据结构;当应用程序调用API函数DeviceIoControl与VxD进行通信时,系统向VxD发送W32_DEVICEIOCONTROL消息,它是应用程序和VxD联系的重要手段,此时ESI寄存器指向一个DIOCParams结构,VxD从输入缓冲区获取应用程序传来的数据,相应处理后将结果放在输出缓冲区,回送给应用程序,达到相互传递数据的目的。(2)在Windows系统下编程序本来就是写消息处理程序与系统进行通信,所以掌握各个消息的含义对写程序非常有用。在这个设计里面,主要是用到下面这个消息:W32_DEVICEIOCONTROL该消息有针对性地传给指定的VXD响应Win32应用程序调用CreateFile或DeviceIoControl函数。CreateFile函数的第一个参数必须为. name,这里name表示VXD的名字。这提供了一条从Win32应用程序调用VXD提供的系统服务的很好途径。该消息的处理程序的原型为:DWORD OnW32DeviceIoControl (PIOCTLPARAMS p);其参数p指向一个IOCTLPARAMS结构的指针。IOCTLPARAMS的结构具体信息如下所示。 Struct tagIOCTLParamsPCLIENT_STRUCT dioc_pcrs; /指向客户寄存器的指针VMHANDLE dioc_hvm; /虚拟机句柄DWORD dioc_VxdDDB; /指向VXD的DDB结构DWORD dioc_IOCtlCode; /IO控制指令PVOID dioc_inBuf; /指向输入缓冲区的指针DWORD dioc_cbInBuf; /输入缓冲区的大小PVOID dioc_OutBuf; /指向输出缓冲区的指针DWORD dioc_cbOutBuf; /输出缓冲区的大小PDWORD dioc_bytesret; /指向一个表示返回字节数的双字OVERLAPPED*dioc_ovrlp; /指向一个OVERLAPPED结构DWORD dioc_hDevice; /设备句柄DWORD dioc_ppdb;IOCTLPARAMS;所有的VXD都应该实现对p-dioc_IOCtlCode = DIOC_OPEN和DIOC_CLOSEHANDLE这两种情形的处理。而其他则根据用户的要求在VXD中对应应用程序给出的IO控制指令进行响应处理。3 Vxd调用机制应用程序向VxD发出DeviceIoControl调用时DeviceIoControl的第2个参数用于指定进行何种控制,控制过程从DIOCParams结构+0Ch处取得此控制码再进行相应处理控制码的代号和含义由应用程序和VxD自行约定系统预定义了DIOC_GETVERSION(O)和DIOC_CLOSEHANDLE(-1)两个控制码,当应用程序调用AN函数CreateFile(”VxDNameJ)动态加载VxD时,系统首先向该VxD的控制过程发送SYS_DYNAMIC_DEVICE_INIT控制消息,若VxD返回成功,系统将再次向VxD发送带有控制码DIOC_OPEN(即DIOC_GETVERSION,值为O)的W32_DEVICEIOCONTROL消息以决定此VxD是否能够支持设备IOCTL接口,VxD必须清零EAX寄存器以表明文持IOCTL接口这时Createne将返回一个设备句柄hDevice,通过它应用程序才能使用DeviceIoControl函数对VxD进行控制。同一个VxD可用CreateFile打开多次,每次打开时都会返回此VxD的一个唯一句柄,但是系统内存中只保留一份VxD系统为每个VxD维护一个引用计数,每打开一次计数值加l。当应用程序调用API函数CloseHandle(hDevice)关闭VxD句柄时,VxD将收到系统发来的带控制码DIOC_CLOSEHANDLE的W32_DEVICEIOCONTROL消息,同时该VxD的引用计数减l,当最终引用计时,VxD将收到系统发来的带控制码DIOC_LOSEHANDLE的W32_DEVICEIOCONTROL消息,同时该VxD的引用计数减l,当最终引用计数为0时,系统向VxD发送控制消息SYS_DYNAMIC_DEVICE_EXIT,然后将其从内存中清除。在极少数情况下应用程序也可调用API函数DeleteFile(“VxDName”),忽略引用计数的值直接将VxD卸出内存,这将可能给使用同一VxD的其它应用程序造成毁灭性影响,应避免使用。(11)第五节 Vxd常用开发工具微软为驱动程序的开发提供了设备驱动程序工具箱(DDK),基于汇编语言的编程方式和许多VMM服务都使用寄存器的调用方式,确实非常难学,没有深厚的汇编语言和硬件基础很难在短时间里开发出自己的VxD。美国Vireo softare公司推出的VToolsD为我们开发VxD提供了方便快捷的方法。程序员可利用C或C+编写自己的VxD,而不必操心许多繁琐的细节。它的基本编程方法是:用VTo01sD自带的QMtckVxD程序快速生成程序框架,在VC+ Brland C+中打开此框架的工程文件,并写进特定的处理代码,编译后就可得到所需的VxD文件。第六节 Vxd技术的应用1 Vxd的实用用途由于vxD可以虚拟根本不存在的硬件,因此可以利用vxD虚拟硬件狗来破解一些软件的加密保护。VxD工作在操作系统的最底层,所以掌握它能使开发者具备扩展操作系统的能力,比如在Windows 9x中截取按下的Ctrl+Alt+Delete组合键而后弹出的是自行设计的消息对话框,实现特殊的系统控制。实时工业控制软件的开发,以前大都是基于DOS操作系统,但是现在随着Windows 9x的普及,需要开发送于Windows 9x的工控软件,利用VxD的功能就可实现Windows下的实时工控。在很多情况下,这可以获得比较满意的实时效果。通过VxD作中介,可使DOS TSR、Winl6应用程序、win32应用程序之间产生协作,可打破win32应用程序4GB独立线性地址空间带来的限制等。2 基于VxD的实时反病毒技术 目前国内的Windows 9x平台反病毒产品大多属静态反病毒软件,指导思想是“以杀为主”,这一方式的缺点是病毒在被清除之前可能早已造成了严重危害。一个好的反病毒软件应该是“以防为主,以杀为辅”,在病毒入侵时就把它清除掉,这就是实时反病毒技术。 windows 9x使用的是Ring 0和Ring 3两个保护级。系统进程运行于Ring0,因而具有对系统全部资源的访问权和管理权。而普通用户进程运行于Ring 3,只能访问自己的程序空间,不允许对系统资源进行直接访问,许多操作受到限制。显然这种普通用户进程是无法胜任实时反病毒工作的,必须使后台监视进程运行在Ring 0优先级,实现这一目的基础就是VxD技术。应用程序通过使用动态加载的VxD,间接获得了对Windows 9x系统的控制权,但要实现对系统中所有文件IO操作的实时监视,还要用到另一种关键技术FileHooking,通过挂接一个处理函数,截获所有与文件IO操作有关的系统调用。Windows 9x使用32位保护模式可安装文件系统(IFS),由可安装文件系统管理器(IFSManager)协调对文件系统和设备的访问,它接收以Win32 API函数调用形式向系统发出的文件IO请求,再将请求转给文件系统驱动程序FSD,由它调用低级别的IOS系统实现最终访问。每个文件IO API调用都有一个特定的FSD函数与之对应,IFSManager负责完成由API到FSD的参数装配工作,在完成文件IO API函数参数的装配之后转相应FSD执行之前,它会调用一个称为FileSystemApiHookFunction的Hooker函数。通过安装自己的Hooker函数,就可以截获系统内所有对文件IO的API调用,井适时对相关文件进行病毒检查,从而实现实时监控。(9)第七节 Vxd的局限性 VxD技术只适用于Windows 9x操作系统,Windows NT不支持此项技术,而是采用更为先进的面向对象的驱动程序模型,例如Windows 2000就采用了一种基于NT的驱动程序模型WDM。此外,由于VxD运行在Ring 0上根本不受Ring 3的制约,也给病毒的制造者即黑客以可乘之机,比如著名的CIH病毒就是一个VxD。第八节 VXD驱动程序与WDM驱动程序开发的比较1 VXD与WDM的差异VxD模式驱动程序是在DOS系统文件的基础上发展起来的,只是在Windows 3.1 9598(第一版)等早期的Windows操作系统中使用。由于VXD模式驱动程序要求开发人员必须深入理解和掌握诸如VMM(虚拟机管理器)、VNCD(虚拟可编程终端控制器)、DMA(直接存储器访问)、内存管理等Windows操作系统内核的工作机制,开发难度大,适应性差,M1crosoft公司试着逐步抛弃它。在Windows操作系统的较新版本,如Windows 98SEME/2000XP中,加入了Plug and Play、ACIP和WMI等高级功能,WDM模式驱动程序就是为了适应这种变化而提出的。VXD模式驱动程序和wDM驱动程序的主要差异如下:(1)支持的Windows版本不同。VXD模式驱动程序支持Windows 3.19598(第一版)等早期的Windows版本,WDM模式驱动程序支持Windows 98SEME2000XP等较新的windows版本。(2)驱动程序的入口点不同。所有的WDM模式驱动程序必须包含一个DriverEntry例程,PNP设备管理器通过在WDM模式驱动程序查询该例程来对设备进行诸如驱动程序初始化,资源分配等工作。在VXD模式驱动程序中,初始化工作则没有固定的位置,放在DIOC_OPEN系统消息或者用户自己定义的消息中。 (3)驱动程序和物理设备的连接方式不同。在VXD模式程序中,开发人员必须在驱动程序中,首先查找硬件设备的DEVICEID和VENDORID,通过这两个ID号来连接对应的硬件设备。在WDM驱动程序中,驱动程序和物理设备的连接则由PNP设备管理器来完成。(4)系统资源分配方式不同。VXD模式驱动程序由VXD开发人员控制在系统初始化时分配IO、内存、DMA、中断等系统资源,在系统重新启动之前不能改变;WDM模式驱动程序由Windows PNP设备管理器在插入或者拔下硬件设备时,动态分配,调整系统资源。(5)系统资源调用方式不同。VXD模式驱动程序需要直接处理VPICD、DMA、内存管理等工作的细节;WDM模式驱动程序对中断处理、DMA控制、内存管理等提供了很好的封装,只需调用相应的DISPATCH例程即可完成对硬件的换作。(2)第九节 使用VT00IJSD开发VXD驱动程序的关键问题用来开发VxD模式驱动程序的工具软件很多,例如Microsoft公司的VXD驱动程序开发包、Numega公司的VTOOLSD工具和Jungo公司的WINDRIVER工具,特别是VTOOLSD工具为开发建立了许多封装,大大简化了VXD驱动程序的开发过程。使用VTOOLSD工具开发VXD驱动程序的流程如图1所示。使用QUICKVXD生成驱动程序框架在VCIDE环境中定制驱动程序添加定制消息映射初始化获取硬件设备初始化分配I/O断口、内存、DMA等硬件资源定制消息处理I/O端口、内存、中断、DMA等操作特殊消息处理释放硬件资源、关闭驱动程序使用DRIVERMONITOR调试完善驱动程序图1 使用VTOOLSD工具开发VXD驱动程序的流程图VTooLSD工具提供了非常友好的VXD驱动程序开发工具QUICKVXD与调试工具DRIVERMONITOR,开发者首先在QUICKVXD窗口中填写几个基本的参数生成VXD驱动程序框架,在VCIDE环境中添加定制消息映射处理驱动程序细节,最后使用DRIVERMONITOR工具调试完善驱动程序。开发者在添加定制消息映射处理驱动程序细节时,尤其要注意下列几个问题。 门定制消息映射 # define IOCTL_PCICFG_GETCFG CTL_CODE(FILE_DEVICE_UNKOWN,0x801,METHOD_NEITHOR,FILE_ANY_ACCESS)在使用CTL_CODE消息宏定制消息映射时,一定要设置正确的参数。CTL_CODE消息宏共有4个参数:设备类型,消息序号,访问方法,访问类型。设备类型一般为FILE_DEVICE_UNKNOWN,也可以使用FILE_DEVICE_VEDIO、FILE_DEVICEE_NETWORK等其他设备类型,根据驱动程序文持的硬件类型而定。消息序号由开发者自己定义,消息序号既可以从1开始,也可以从更大的自然数开始,但不能够大于65535,多个消息映射的消息序号既可以是连续的,也可以是间隔的。访问方法共有4种:METHOD_NEITHER,METHOD_BUFFERED,METHOD_IN_DIRECT,METHOD_0UT_DIRECT在消息映射没有对硬件设备的寄存器、IO端口、内存进行操作时,使用METHOD_NEITHER方法,在消息映射对硬件设备的寄存器、IO端口进行读写操作时,使用METHOD_BUFFERED方法,在消息映射对硬件设备的内存进行读操作时,使用METHOD_OUT_DIRECT方法,在消息映射对硬件设备的内存进行写操作时,使用METHOD_IN_DIRECT方法。访问类型一般设置为FILE_ANY_ACCESS,这样可以对硬件设备进行各种操作,也可以使用其他参数来限制对硬件设备的速写等访问。系统消息宏DIOC_OPEN和DIOC_CLOSE等不需要用户显示定义,在驱动程序启动时自动加入消息队列。(2)初始化 在进行驱动程序初始化时,需要完成查找获取硬件设备、分配硬件资源等工作。VXD驱动程序根据设备类型使用硬件设备的DEVlCElD和VENDOND来查找硬件设备。Windows操作系统使用树型结构来管理硬件设备,VTooLSD工具提供了很好的DDK函数CONFIGMG_Locate_DevNode、CONFIGMG _Get_Child 、CONFIGMG_Get_Sibling遍历树型结构查找硬件设备。Windows操作系统在每次启动时给硬件设备分配IO端口、内存、中断、DMA等资源,通过调用DDK函数CONFIGMG_Get_ALLOC_Log_Conf来填充CMCONFIG结构能够获取Windows操作系统为硬件设备分配的硬件资源。如果硬件资源中包括内存资源,则需要进行内存映射操作,将物理地址转换为线性地址,否则无法进行内存操作。在内存映射时首先要计算内存段占用的页面数,然后使用PageReserve、PageCommitPhys函数进行内存映射。在完成内存操作退出驱动程序时,则需要使用PageDecommit、PageFree函数把映射的内存释放掉。初始化操作既可以放在系统消息DTOC_OPEN中,也可以放在用户自定义消息中。如果放在自定义消息中,则在驱动程序启动后,需要显示调用一次自定义消息操作,完成初始化工作。(3)定制消息处理VTOOLSD工具为IO端口、中断、DMA等提供了功能完善的封装类来支持VXD驱动程序的工作。用户通过重载这些类可以实现对硬件资源的各种操作。例如用户需要进行中断操作,那么就可以按照下面的方法使用VHARDWAREENT类。1)派生类VHAKDwAKElNT。在派生类中定义构造函数,并重载中断处理通知处理成员函数。2)在派生类构造函数里调用VN入KDwARElNT的构造函数,并指定中断号。3)对中断通知处理成员函数编程4)如果想让所有的虚拟机管理器都能够处理本中断,可以调用forceDefaultOwner成员函数。5)创建一个派生类实例,实例的创建通常放在驱动程序初始化工作里。6)调用hook成员函数,在此函数之后可以调用physicalUnmask成员函数保证中断不被屏蔽。7)退出驱动程序(6)第三章 VTOOLSD的应用基础第一节 VTOOLSD简介在以前开发VXD是一件非常单调和深奥的事情,那是因为当时大家只能使用微软提供的DDK和32汇编工具如MASM5.11进行开发。那时的开发工作又苦又累。不过自从Compuware公司推出VTOOLSD后,一切就明朗了。VTOOLSD通过屏蔽系统及VXD的底层技术细节提供丰富的C运行库和C+类库,让开发人员充分享用面向对象编程方法的方便与快捷。的确,VTOOLSD功能非常强大的,而且开发界面(图形界面)较之以前有很大的突破,再加上它使用C/C+编译器,更是让广大的C/C+高手们有用武之地。现在广泛使用的是VTOO LSD 2.03版。当前最新的版本是1999年推出的VTOOLSD 3.0版本。(1)第二节 环境参数设置问题VTOOLSD 2.4及前期版本的安装程序不是很完善,如按照系统所设置的参数,系统不能很正常的运行。1 VTOOLSD指定VC编译器路径之问题 安装VTOOLSD,需指定VC等编译器所在的路径,由于VC等编译器所在路径常常是长路径名,而VTOOLSD不支持长路径名(虽然安装时用浏览方式来获取的路径是通过了系统的安装,但是该路径在编译时是无效的)。我们在安装时需把长路径改成MS DOS方式下的路径名,具体设置时我们先应进入MS DOS方式,用DIR、CD命令来获取系统当时的路径数据。如VC的路径为“C:PROGRA-lMICR0S-lVC98” 。2 VTOOLSD安装路径之问题VTOOLSD安装成功后,需把VTOOLSD所在的系统路径设置成环境常数到AUTEXECBAT文件的VTO OLSD参数项中,按理说VTOOLSD的系统路径应该是随意设置的,但最好把安装路径设置成如“C:VTOOLSD”、“D:VTOOLSD”等,即设置成与环境变量名一样的名称VTOOLSD,系统可正常的运行。否则NMAKE编译器有时会找不到VTOOLSD系统提供的头文件。3 VxDView工具的起始位置之问题VxDview工具可用来浏览当前系统装载了哪些虚拟驱动程序,我们可用该工具来查看程序是否装载了某个VxD。系统安装成功后,VxDView不能很好的运行,看不到系统装载的VxD,原因在于VxD View的起始位置不完善,应把VTOOLSD for Windows95文件夹中VxDView起始位置改成VxDView所在的路径(一般在VToolsD系统下的BIN子目录)。第三节 VTOOLSD的工具程序 Infedit程序是用来编辑INF文件的,INF文件是用来安装驱动程序的。Pele程序是用来把PE文件转换成LE文件的。Win32程序、库文件(*.lib)和目标文件(*.obj)等都是PE文件,而VXD等都是LE文件。Vxdload程序是用来加载可动态加载的VXD。 Vxdview程序是用来查看已经加载的VXD的信息的。QuickVxD的使用QuickVxD是VT00ALD FOR WIN95开发工具的核心。程序员在QuickVxD中选择和定义所需的VxD代码框架的基本特征,定义完成以后就可生成VxD应用程序框架,它使开发者只须在VxD应用框架中添加所需的代码而不必注重于编程的低级代码。QuickVxD是一种基于属性页对话框的代码产生器,程序员通过选择少量简单的选项,只需执行简单的操作就可以生成VxD工程文件的应用程序框架。此属性页对话框包括Device Parameters (设备参数)对话框、API(应用程序接口)对话框、VxDServices(VxD服务)对话框、Control Message(控制消息)对话框、Windows 95 Control Message(Windown 95 控制消息)对话框、0utPut Files(文件输出)对话框、Classes(C+类)类属性页。 单击“Device Parameters”标签,对话框如图2.2所示图2.2 设备参数属性页Device Name是所创建的VxD设备名称。Device ID(设备标识)是一个16位的无符号整数,是所创建的VxD设备标识,不能和其他VxD设备的Device ID相冲突。Device Initialization 0rder 确定Windows9598对VxD设备装载的顺序,如果与其他的VxD设备无关可以使用VTOOLSD提供的缺省值UNDEFINED_INIT_ORDER,如果必须在虚拟设备XXX之后加载,可用XXX_INIT_ORDER+1,如果须在设备XXX之前加载可XXX_INIT_ORDER-l。Frameword决定所产生的vxD程序代码框架是用C语言还是C+语言。Special Support选项决定产生的VxD是否可以动态加载。单击“API”标签,对话框如图2.3所示。图2.3 API属性页在标准应用程序入口(Standard Application Entry Points)多选框中可以钩选是否在你的VXD中提供V86应用程序长跳转到你的VXD的入口点(Real/V86 Mode)或保护模式应用程序长跳转到你的VXD的入口点(Protected Mode)。在指定厂商应用程序入口(Vendor Specific Application Entry Points)多选框中可以钩选是否利用DPMI(DOS Proteced Mode Interface)分别提供V86程序或保护模式程序到VXD的入口点。除了在极少数情形下,现在一般都推荐使用标准应用程序入口方式。单击“Control Message”标签,对话框如图2.4所示。图2.4 控制消息属性页QuickVXD将VXD的所有消息划分在两个消息页,即Control Messages和Windows 95 Control Messages中。本属性页包括的消息在Windows 3x和Windows 9x下都支持,如果需要创建某个消息的处理框架和处理程序,只须钩选相应的消息即可,QuickVXD会自动帮你作好处理框架和生成最简单的处理程序代码。单击Windows 95 Control Message属性页,对话框如图2.5所示。图2.5 Windows 95控制消息属性页在该属性页中的所有消息都Windows 95支持。也许大家注意到了有几个消息的形式是“x_x_x2”以2结尾(表示其他的字符串),比如“CLOSE_VM_NOTIFY2”。增加这些消息(这些消息都是或退出,或撤消,或终止某某)的目的是为了解决在W

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论