当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 虚拟8086模式的内存管理 下边我们用到的V86即指虚拟8086模式。
 

 

 ·iczelionvxdcntut7    »显示摘要«
    摘要:请求执行时间段与shell函数 下载例子程序 理论: 请求执行时间段通常被简称为"appy time"。是指当系统vm稳定到充许vxds和ring-3级别的应用软件(特别是16-bit的应用软件)交互时的时间段。例如,在一个特定时间段,vxds能加载并调用在16-bit dlls中的函数。这个appy time在windows 3.x中是无效的。在windows3.x,一个vx......
 ·iczelionvxdcntut5    »显示摘要«
    摘要: vxd例程:消息框 在上一节教程里,我们讲了编写一个vxd程序的方法。现在我们要学以致用。在这一节里,我们要编写一个静态vxd,这个静态vxd在一个虚拟机创建或销毁时就会弹出一个消息框。 在这里下载例子。 捕获虚拟机创建和结束事件 当一个虚拟机创建时,vmm发送create_vm控制消息给所有的vxd程序。当一个虚拟机退出时,它也发送vm_terminate和vm_terminate2......


iczelionVxdcntut9

 

下边我们用到的v86即指虚拟8086模式. 在以前的教程中,你学习了怎样模拟v86中断,但还有一个问题没有解决:在vxd与v86代码之间交换数据.我们将在此学习如何使用v86内存管理器来实现这个功能.在这里下载例子程序 【程序编程相关:导出新东方背单词的单词

虚拟8086模式的内存管理 【推荐阅读:利用NameValueCollectio

假如你的vxd与一些v86程序一起运行,如何传送大量数据到v86程序中或从v86程序中传送大量数据迟早是一个大问题.通过寄存器传送大量数据是不现实的.可能你的下一个想法是在ring0中分配一大块内存,并且通过一些寄存器传送其指针到v86程序,使其能访问这些数据.假如你这样做,可能会破坏你的系统,因为v86的地址定位方式需要segment:offset对,而不是线性定位方式.对这个问题,有很多解决的方法.然而,我选择了一个由v86内存管理器提供的一种简便的方法. 【扩展信息:ABAP学习笔记之五-报表的事件

理论

如你能在你可使用的v86内存范围内找到一个空闲的内存块作为通讯缓冲区,这将解决其中的一个问题.然而,指针传送的问题依然存在.你可以通过v86内存管理器的服务来解决这两个问题.v86内存管理器是为v86应用管理内存的静态vxd.它还为v86应用提供ems与xms服务与为其他vxd提供api传送服务.api传送是一个从ring0拷贝数据到v86范围内的缓冲区并且传送v86缓冲区地址到v86代码的过程.v86内存管理器有一个在v86内存范围内的传送缓冲区,其含有vxd拷贝到v86内存范围内的数据,反之亦然.初始的缓冲区是4k.你以调用v86mmgr_set_mapping_info来增加它的大小.

现在你知道了传送缓冲区,我们如何拷入或拷出数据呢?这个问题通过调用两个服务来解决:v86mmgr_allocate_buffer与v86mmgr_free_buffer.

v86mmgr_allocate_buffer从传送缓冲区分配一块内存并且从ring0拷贝一些数据到分配的v86缓冲区.v86mmgr_free_buffer正好相反:它从分配的v86内存块拷贝一些数据到ring0缓冲区并且释放由v86mmgr_allocate_buffer分配的内存块.

记住,v86在内存管理器象堆栈一样管理被分配的缓冲区.这意味着分配/释放必须按先进后出的规则.所以如你调用了两次v86mmgr_allocate_buffer,第一个v86mmgr_free_buffer将释放由第二个v86mmgr_allocate_buffer调用而分配的缓冲区.

我们来看一下v86mmgr_allocate_buffer的定义,它是一个基本寄存器传送参数的服务.

ebx 当前vm的句柄 ebp 指向当前vm的客户寄存器结构的指针 ecx 从传送缓冲区分配的字节数 carry flag 进位标志位,如你不想从ring0缓冲区拷贝数据到分配的内存块就清零, 如你想从ring0缓冲区拷贝数据到分配的内存块就置1 fs:esi 指向ring0缓冲区的selector:offset指针,缓冲区中有要被拷贝到被分配的 缓冲区中的数据如果进位标志位被清零,则忽略它.

假如调用成功,进位标志位被清零并且ecx包含在传送缓冲区中的字节数.这个数值应小于你要求的数值,所以你应保持这个数值,v86mmgr_free_buffer待会要用到它.edi的高字包含被分配的内存块的v86段地址,偏移地址在在低字中.
...   下一页

 ·iczelionvxdcntut3    »显示摘要«
    摘要: 虚拟设备驱动程序结构现在大家对vmm和vxd有了一定的了解,接下来我们来看一看如何编写vxd代码。首先,你必须具备windows 95/98 device driver development kit。window95 ddk只有msdn 订户才能拿到,但windows98 ddk却可以免费从microsoft公司取得。尽管windows 98 ddk是面向wdm的,但你还是可以用它来开......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE