企业网站设计方式自助企业建站模版

张小明 2026/1/10 12:37:06
企业网站设计方式,自助企业建站模版,电子商务网站建设和运营,wordpress网站前端优化在上一节教程里#xff0c;我们讲了编写一个VxD程序的方法。现在我们要学以致用。在这一节里#xff0c;我们要编写一个静态VxD#xff0c;这个静态VxD在一个虚拟机创建或销毁时就会弹出一个消息框。 在这里下载例子。 捕获虚拟机创建和结束事件当一个虚拟机创建时#xff…在上一节教程里我们讲了编写一个VxD程序的方法。现在我们要学以致用。在这一节里我们要编写一个静态VxD这个静态VxD在一个虚拟机创建或销毁时就会弹出一个消息框。在这里下载例子。捕获虚拟机创建和结束事件当一个虚拟机创建时VMM发送Create_VM控制消息给所有的VxD程序。当一个虚拟机退出时它也发送VM_Terminate和VM_Terminate2消息给所有的VxD程序。我们的工作很简单在设备控制程序里处理Create_VM and VM_Terminate2消息。当我们的VxD程序收到这两个控制消息时它在屏幕上弹出一个消息框。当VxD程序收到Create_VM或者 VM_Terminate2消息时该虚拟机的句柄保存在ebx中。一个虚拟记的句柄可以看作它的唯一的ID。每一个虚拟机都有它自己唯一的ID(虚拟机句柄)。你可以像使用进程ID一样使用虚拟机ID调用函数时把它当作参数传送。更进一步的来看一个虚拟机句柄实际上是一个指向虚拟机控制块(VMCB)的32位线性地址。一个虚拟机控制块是一个包括了许多关于该虚拟机的重要属性的结构。它的定义如下cb_s STRUCCB_VM_Status DD ?CB_High_Linear DD ?CB_Client_Pointer DD ?CB_VMID DD ?CB_Signature DD ?cb_s ENDSCB_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服务来同用户通讯。在这个例子里我们要用到其中的一个SHELL_Message.SHEll_Message是一个寄存器法的服务函数通过寄存器来传送参数ebx 显示这个消息的虚拟机的句柄。eax 消息框的标志位。你可以在shell.inc中查查它们的详细信息它们都是以MB_开头的。ecx 要显示的消息的32位线性地址。edi 消息框的标题的32位线性地址。esi 如果你要知道用户对你的消息框作的反应操作就在这里填写返回函数的32位线性地址。如果你不想知道就用NULL。edx 用来传送你的返回函数所需要的参数如果你在esi中填了这个函数的地址。返回后如果调用成功返回标志被清零否则返回标志被置位。例子.386pinclude VMM.incinclude shell.incDECLARE_VIRTUAL_DEVICE MESSAGE,1,0, MESSAGE_Control, UNDEFINED_DEVICE_ID, UNDEFINED_INIT_ORDERBegin_control_dispatch MESSAGEControl_Dispatch Create_VM, OnVMCreateControl_Dispatch VM_Terminate2, OnVMCloseEnd_control_dispatch MESSAGEVxD_PAGEABLE_DATA_SEGMsgTitle db VxD MessageBox,0VMCreated db A VM is created,0VMDestroyed db A VM is destroyed,0VxD_PAGEABLE_DATA_ENDSVxD_PAGEABLE_CODE_SEGBeginProc OnVMCreatemov ecx, OFFSET32 VMCreatedCommonCode:VMMCall Get_sys_vm_handlemov eax,MB_OKMB_ICONEXCLAMATIONmov edi, OFFSET32 MsgTitlexor esi,esixor edx,edxVxDCall SHELL_MessageretEndProc OnVMCreateBeginProc OnVMClosemov ecx,OFFSET32 VMDestroyedjmp CommonCodeEndProc OnVMCloseVxD_PAGEABLE_CODE_ENDSend分析:Begin_control_dispatch MESSAGEControl_Dispatch Create_VM, OnVMCreateControl_Dispatch VM_Terminate2, OnVMCloseEnd_control_dispatch MESSAGE此VxD程序处理两个控制消息Create_VM和VM_Terminate2当收到Create_VM 控制消息时它调用OnVMCreate函数。当收到VM_Terminate2 消息时它调用OnVMClose 函数。VxD_PAGEABLE_DATA_SEGMsgTitle db VxD MessageBox,0VMCreated db A VM is created,0VMDestroyed db A VM is destroyed,0VxD_PAGEABLE_DATA_ENDS我们把这些数据放在可调页段里面。BeginProc OnVMCreatemov ecx, OFFSET32 VMCreatedCommonCode:VMMCall Get_sys_vm_handlemov eax,MB_OKMB_ICONEXCLAMATIONmov edi, OFFSET32 MsgTitlexor esi,esixor edx,edxVxDCall SHELL_MessageretEndProc OnVMCreate我们用BeginProc和 EndProc宏来创建OnVMCreate。OnVMCreate函数把调用SHELL_Message服务所需要的参数放到寄存器里面去。因为我们要在系统虚拟机上显示消息框所以不能使用ebx中的值ebx包含了在创建的虚拟机的句柄而我们要的是系统虚拟机的句柄。于是我们用另一个VMM服务Get_Sys_VM_Handle来得到系统虚拟机的虚拟机句柄。我们分别把消息的地址和消息框标题的地址放在ecx和edi里面。我们不需要知道客户的反应所以我们把esi和edx置零。当每个参数都在相应的寄存器内后我们就调用 SHELL_Message 来显示消息框。BeginProc OnVMClosemov ecx,OFFSET32 VMDestroyedjmp CommonCodeEndProc OnVMCloseOnVMCloseOnVMClose函数本身是很简单的。因为它要使用的代码和OnVMCreate相同所以它在用另一个消息的地址初始化ecx后就转到OnVMCreate中的代码去了。改变定义文件(.def)VxD MESSAGESEGMENTS_LPTEXT CLASS LCODE PRELOAD NONDISCARDABLE_LTEXT CLASS LCODE PRELOAD NONDISCARDABLE_LDATA CLASS LCODE PRELOAD NONDISCARDABLE_TEXT CLASS LCODE PRELOAD NONDISCARDABLE_DATA CLASS LCODE PRELOAD NONDISCARDABLECONST CLASS LCODE PRELOAD NONDISCARDABLE_TLS CLASS LCODE PRELOAD NONDISCARDABLE_BSS CLASS LCODE PRELOAD NONDISCARDABLE_LMGTABLE CLASS MCODE PRELOAD NONDISCARDABLE IOPL_LMSGDATA CLASS MCODE PRELOAD NONDISCARDABLE IOPL_IMSGTABLE CLASS MCODE PRELOAD DISCARDABLE IOPL_IMSGDATA CLASS MCODE PRELOAD DISCARDABLE IOPL_ITEXT CLASS ICODE DISCARDABLE_IDATA CLASS ICODE DISCARDABLE_PTEXT CLASS PCODE NONDISCARDABLE_PMSGTABLE CLASS MCODE NONDISCARDABLE IOPL_PMSGDATA CLASS MCODE NONDISCARDABLE IOPL_PDATA CLASS PDATA NONDISCARDABLE SHARED_STEXT CLASS SCODE RESIDENT_SDATA CLASS SCODE RESIDENT_DBOSTART CLASS DBOCODE PRELOAD NONDISCARDABLE CONFORMING_DBOCODE CLASS DBOCODE PRELOAD NONDISCARDABLE CONFORMING_DBODATA CLASS DBOCODE PRELOAD NONDISCARDABLE CONFORMING_16ICODE CLASS 16ICODE PRELOAD DISCARDABLE_RCODE CLASS RCODEEXPORTSMESSAGE_DDB 1汇编过程ml -coff -c -Cx -DMASM6 -DBLD_COFF -DIS_32 message.asmlink -VxD -def:message.def message.objVxD 的安装 把message.VxD放到\system目录下。 在system.ini文件里的[386enh]部分里加上如下的一行devicemessage.VxD 重启你的计算机。测试这个VxD打开一dos窗口你会看到弹出的消息框显示“A VM is created.。当你关闭一个dos窗口又会弹出一个消息框显示“A VM is destroyed。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

学校怎么做网站wordpress注册授权

HyPlayer完全指南:免费开源音乐播放器的智能体验 【免费下载链接】HyPlayer 仅供学习交流使用 | 第三方网易云音乐播放器 | A Netease Cloud Music Player 项目地址: https://gitcode.com/gh_mirrors/hy/HyPlayer 想要体验比官方版更出色的第三方音乐播放器吗…

张小明 2026/1/10 10:30:18 网站建设

网站集约化建设存在的问题wordpress dreamwear

好用的厦门考研公司:福建考研引领高效备考之路在当今竞争激烈的研究生入学考试中,选择一家好用且专业的考研辅导公司至关重要。对于厦门地区的考生而言,[福建考研]凭借其丰富的教学经验和优质的教育资源,成为了众多学子的首选。本…

张小明 2026/1/10 10:25:22 网站建设

学校网站建设费计入什么科目附近的灯箱广告制作

第一章:工业控制逻辑引擎概述工业控制逻辑引擎是现代自动化系统的核心组件,负责执行预定义的控制逻辑以协调和管理工业设备的运行。它广泛应用于制造业、能源、交通等领域,通过实时数据采集、逻辑判断与指令输出,实现对复杂生产流…

张小明 2026/1/10 10:26:19 网站建设

深圳龙岗做网站公司哪家好网站建设公司南昌

目录已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!已开发项目效果实现截图 同行可拿货,招校园代理 基于python语言的考试信息报名系统_5n9zn–论文_pycharm djan…

张小明 2026/1/10 10:25:18 网站建设

四川网站建设 四川冠辰科技注册一个软件需要多少钱

Kotaemon如何实现会话加密?TLS端到端保护 在企业级智能对话系统日益普及的今天,一个看似简单的问题背后可能隐藏着巨大的安全风险:当用户通过网页或App向AI助手提问时,这条消息是否会被截获?如果问题涉及财务数据、客…

张小明 2026/1/9 17:33:13 网站建设

58网站怎么做优化宁夏网页制作公司

硅二极管的“0.7V”从何而来?——深入解析正向导通电压的本质在你第一次搭建整流电路时,是否曾疑惑:为什么交流变直流后电压总是“少了一截”?当你用万用表测量一个导通状态下的硅二极管两端压降,读数稳定在0.65V 左右…

张小明 2026/1/6 21:50:25 网站建设