vxd例程:消息框
在这里下载例子. 【程序编程相关:J2EE架构开发服务系统的一些心得体会[】在上一节教程里,我们讲了编写一个vxd程序的方法.现在我们要学以致用.在这一节里,我们要编写一个静态vxd,这个静态vxd在一个虚拟机创建或销毁时就会弹出一个消息框. 【推荐阅读:刚在博客堂上看到思归作的一个java与c】
当一个虚拟机创建时,vmm发送create_vm控制消息给所有的vxd程序.当一个虚拟机退出时,它也发送vm_terminate与vm_terminate2消息给所有的vxd程序.我们的工作很简单:在设备控制程序里处理create_vm and vm_terminate2消息.当我们的vxd程序收到这两个控制消息时,它在屏幕上弹出一个消息框. 【扩展信息:ABAP学习笔记之三-内表】
捕获虚拟机创建与结束事件
当vxd程序收到create_vm或者 vm_terminate2消息时,该虚拟机的句柄保存在ebx中.一个虚拟记的句柄可以看作它的唯一的id.每一个虚拟机都有它自己唯一的id(虚拟机句柄).你可以像使用进程id一样使用虚拟机id:调用函数时,把它当作参数传送. 更进一步的来看,一个虚拟机句柄实际上是一个指向虚拟机控制块(vmcb)的32位线性地址. 一个虚拟机控制块是一个包括了许多关于该虚拟机的重要属性的结构.它的定义如下: cb_s struc cb_vm_status dd ? cb_high_linear dd ? cb_client_pointer dd ? cb_vmid dd ? cb_signature dd ? cb_s ends cb_vm_status 包含了反映虚拟机状态的一些标志位. cb_high_linear 是一个指向在系统共享区(约3gb)的虚拟机镜像的一个线性地址.这个概念需要解释一下.在window95下,一个vxd不能直接访问到v86区域,代替地,vmm把每个虚拟机的v86区域都映射到系统共享区.当一个vxd程序要访问或修改虚拟机中的v86区时,它就在虚拟机的高线性区域进行操作.例如,如果显存的地址是0b8000h,而你的vxd程序要访问这个区域.它就要把cb_high_linear中的值上0b8000h,然后访问那个区域.你在高线性镜像区域所作的修改都会被保存到虚拟机中去,因为这两个区域共享一个页面目录入口.使用高线性镜像在它多数情况下非常有效,因为你甚至可以修改一个不是当前虚拟机的虚拟机. cb_client_pointer 包含了客户寄存器结构的地址.一个客户寄存器结构包含了在一个虚拟机中被中断的v86或保护模式程序的所有寄存器的值.如果你的vxd程序要读取/改动v86或pm程序的状态,它可以改动客户寄存器结构里的值,当vmm返回执行该程序时,这些改动会被保存到程序里去. cb_vmid 虚拟机的身份验证数字.当vmm创建一个虚拟机时,就给该虚拟机分配一个数字.系统虚拟机的vmid是1. cb_signature 包含字串“vmcb”.这个元素是用来检测虚拟机句柄是否有效的.显示一个对话框
一个vxd程序可以通过virtual shell device服务来同用户通讯.... 下一页