毕业论文-基于windows98系统的数据采集开发(编辑修改稿)内容摘要:
序在 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 tagIOCTLParams { PCLIENT_STRUCT dioc_pcrs。 //指向客户寄存器的指针 VMHANDLE dioc_hvm。 //虚拟机句柄 四川大学本科毕业论文 基于 win98 系统的数据采集开发 6 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 都应该实现对 pdioc_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接口.这时 Createn[e将返回一个设备句柄 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(“\\.\四川大学本科毕业论文 基于 win98 系统的数据采集开发 7 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系统的控制权,四川大学本科毕业论文 基于 win98 系统的数据采集开发 8 但要实现对系统中所有文件 I/ O操作的实时监视,还要用到另一种关键技术——FileHooking,通过挂接一个处理函数,截获所有与文件 I/ O操作有关的系统调用。 Windows 9x使用 32位保护模式可安装文件系统 (IFS),由可安装文件系统管理器(IFSManager)协调对文件系统和设备的访问,它接收以 Win32 API函数调用形式向系统发出的文件 I/ O请求,再将请求转给文件系统驱动程序 FSD,由它调用低级别的 IOS系统实现最终访问。 每个文件 I/ O API调用都有一个特定的 FSD函数与之对应, IFSManager负责完成由 API到 FSD的参数装配工作,在完成文件 I/ O API函数参数的装配之后转相应 FSD执行之前,它会调用一个称为 FileSystemApiHookFunction的 Hooker函数。 通过安装自己的 Hooker函数,就可以截获系统内所有对文件 I/ O的 API调用,井适时对相关文件进行病毒检查,从而实现实时监控。 (9) 第七节 Vxd 的局限性 VxD技术只适用于 Windows 9x操作系统 , Windows NT不支持此项技术 , 而是采用更为先进的面向对象的驱动程序模型 , 例如 Windows 20xx就采用了一种基于 NT的驱动程序模型WDM。 此外,由于 VxD运行在 Ring 0上根本不受 Ring 3的制约,也给病毒的制造者即黑客以可乘之机,比如著名的 CIH病毒就是一个 VxD。 第八节 VXD 驱动程序与 WDM 驱动程序开发的比较 1 VXD 与 WDM 的差异 VxD模式驱动程序是在 DOS系统文件的基础上发展起来的 , 只是在 Windows 95/98(第一版 )等早期的 Windows操作系统中使用。 由于 VXD模式驱动程序要求开发人员必须深入理解和掌握诸如 VMM(虚拟机管理器 )、 VNCD(虚 拟可编程终端控制器 )、 DMA(直接存储器访问 )、内存管理等 Windows操作系统内核的工作机制,开发难度大,适应性差,M1crosoft公司试着逐步抛弃它。 在 Windows操作系统的较新版本,如 Windows 98SE/ME/20xx/ XP中,加入了 Plug and Play、 ACIP和 WMI等高级功能, WDM模式驱动程序就是为了适应这种变化而提出的。 VXD模式驱动程序和 wDM驱动程序的主要差异如下 : (1)支持的 Windows版本不同。 VXD模式驱动程序支持 Windows / 95/ 98(第一版 )等 早期的 Windows版本, WDM模式驱动程序支持 Windows 98SE/ ME/ 20xx/ XP等较新的windows版本。 (2)驱动程序的入口点不同。 所有的 WDM模式驱动程序必须包含一个 DriverEntry例程,PNP设备管理器通过在 WDM模式驱动程序查询该例程来对设备进行诸如驱动程序初始化,资源分配等工作。 在 VXD模式驱动程序中,初始化工作则没有固定的位置,放在DIOC_OPEN系统消息或者用户自己定义的消息中。 四川大学本科毕业论文。毕业论文-基于windows98系统的数据采集开发(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。