C++语言的VxD与外界通信的全部接口[VC/C++编程]
本文“C++语言的VxD与外界通信的全部接口[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
1、 什么是VxD
从多任务操作系统Windows 3.1起,计算机中的任一物理设备x可同时被基于Dos或Windows的多个进程利用,这种一对多的关系称为"设备虚拟化",各进程通过运行在核心层的VxD(虚拟x设备驱动程序)存取物理设备x.操作系统供应利用户的软件服务也可以用VxD实现.计算机中的其他资源,如CPU、内存等也可同时被多个进程利用,各进程在系统供应的虚拟机(VM)环境下存取这类资源.
VxD可由虚拟机管理器(VMM)在开机时装入核心层(称静态装入,即置VxD于c:\windows\system目录下,在c:\windows\system.ini文件中,对节[386Enh]加一行"device=此VxD文件名"),或由利用程序及时装入(称动态装入),此后,各进程便可存取锁定在内存中的VxD数据区,以及时掌握VxD的行为,VxD的内部构造可避免两个进程同时存取其数据区.VxD通过呼应VMM发给它的事件与外界交互.
Windows 95中,基于Dos的每个进程在单独的VM中运行(称在V86情势下运行),既可按Dos单进程方法,在640k低内存中运行(称在实情势下运行),又可操纵多进程环境的长处,在整个内存中运行(称在保护情势下运行),通过95的DPMI接口存取内存高端的Windows图形环境.其他16位或32位利用程序均在同一系统VM中运行.
下面只谈论95环境下的VxD.
2、 VxD的成立
1. 由汇编语言成立VxD:需安装微软公司的Win32 SDK及DDK.
2. 由C或C++语言成立VxD:需安装VC2.0或BC4.0,及Vireo Software公司的VToolsD软件包.
VToolsD含3个实用工具:可成立VxD框架的QuickVxD;可动态装卸VxD的VxD Loader;可显示内存VxD特点的VxD Viewer.
QuickVxD含7个对话页:
(1) Device Parameters页
包含最多8个字符的VxD名,唯一标识号(ID),相对其他VxD的装入次序(VxD Viewer可显出某VxD的装入次序值Init Order,若指定新VxD的装入次序小于此Init Order,则新VxD将在此VxD前被装入),实现语言(C或C++)静、动态装入方法等.
(2) VxD Services页
可被其他VxD拜候的接口(称为VxD服务),要求本VxD的ID>0,且未与内存各VxD的ID值冲突.
此ID可向微软公司申请,也可以利用Vireo公司的VIREO_TEST_ID(3180h).下称此类ID为接口ID.
(3) API页
可被利用程序在实情势/V86情势下、保护情势下、DPMI的实情势/V86情势下、DPMI的保护情势下拜候的接口(统称利用接口),前二者要求本VxD供应接口ID,后二者只要求本VxD供应以0末尾的唯一标识串;拜候前,先要静态或动态装入本VxD(第4者要求静态装入).
第1、3者可被普通汇编程序拜候,第2、4者可被在BC的Windows 3-x(16)平台上生成的Windows程序拜候.
(4) Control Messages页
对呈目前Windows 3.1及Windows 95中各消息的呼应,如静态装入时的DTNAMIC_INIT消息.
(5) Windows95 Control Messages页
对只呈目前Windows 95中各消息的呼应,如动态装入时的SYS_DYNAMIC_INIT消息.
(6) 用C++实现VxD时的Classes页
从虚拟设备驱动程序类VDevice派生的类名(如MyDevice),此类的成员函数将接纳(4)及(5)页中呈现的大大都消息.
从VM实例类VVirtualMachine派生的类名(如MyVM),此类的成员函数将接纳贯串在VM生命期中的各消息,如系统VM初启消息Sys_VM_Init;
从线程实例类VThread派生的类名(如MyThread).此类的成员函数将接纳贯串在线程生命期中的各消息,如新线程初启消息THREAD_INIT.
(7) Output Files页
表现以上内容的3个VxD文件(.h,.c或.cpp,.mak)将被存放的目录位置.
以上是“C++语言的VxD与外界通信的全部接口[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |