Programming 版 (精华区)

发信人: tih (我不敢说), 信区: Programming
标  题: Windows 95虚拟设备驱动程序(VxD)7
发信站: 紫 丁 香 (Thu Sep  9 08:23:00 1999), 转信


七、系统控制消息

VMM发送系统控制消息给VxD,以通知VxD影响系统和虚拟机的变化。
大多数VxD需要跟踪虚拟机的创建和状态,所以无论何时创建、初
始化或者终止虚拟机,VMM都会发送消息给VxD。VMM也会在执行焦
点移动到一个虚拟机或者从一个虚拟机移走时,以及虚拟外壳设备
需要给用户显示一个消息框时发送消息给VxD。
下面是公共消息和VxD应该怎样处理这些消息的方法列表:

Begin_Message_Mode消息:
当虚拟外壳设备需要给用户显示一个消息框但不能使用系统虚拟机和
Windows函数时VxD收到此消息。虚拟键盘、鼠标和显示设备保存当前
状态,允许任何消息模式服务并为消息模式处理初始化相应设备。

Create_VM消息:
这是当一个新的虚拟机被创建时VxD收到的第一条消息。VxD应该初始
化与虚拟机有关的数据,特别是控制块。

Debug_Query消息:
VxD从WDEB386调试器收到此消息。VxD可以显示调试列表和从调试终
端读取用户命令。

Destroy_VM消息:
这是VxD收到的第三条虚拟机终止消息。Simulate_Int和Exec_Int服
务对获得此消息的虚拟机不再有效。

Device_Init消息:
这是VxD收到的第二条消息。允许中断,大多数VxD分配和拷贝初始状
态到系统虚拟机控制块中的设备指定部分,安装中断回调函数和I/O
保护异常以及指定实例数据。这时,Simulate_Int和Exec_Int服务变
得有效。

End_Message_Mode消息:
当虚拟外壳设备不再需要显示消息框时VxD收到此消息。虚拟键盘、鼠
标和显示器设备恢复获得此消息的虚拟机以前保存的状态,禁止任何消
息模式服务。

Init_Complete消息:
这是VxD收到的第三条消息,也是最后一条与系统
初始化有关的消息。虽然大多数VxD都不处理此消息,但使用V86内存的
VxD应该在此消息返回前定位和申请内存。当VxD返回此消息时,VMM丢弃
VxD的初始化代码和数据段。

Query_Destory消息:
当虚拟外壳设备需要决定是否可以删除虚拟机时VxD
收到此消息。VxD可以通过设置进位标志(CF——译者注)返回以阻止虚
拟机被删除,在这种情况下VxD应该使用SHELL_Message服务来通知用户问
题。

Reboot_Processor消息:
当用户试图重新启动计算机时VxD收到此消息。
可以重新启动计算机的VxD,例如键盘设备应该完成该工作。

Set_Device_Focus消息:
当执行焦点从一个虚拟机移动到另一个虚拟机时VxD收到此消息。VxD恢
复硬件设备到与虚拟机有关的状态。如果VxD使用I/O捕获管理没有执行
焦点时的虚拟机,VxD应该尽可能地移走太多的I/O捕获,使虚拟机运行
尽可能地快一些。

Sys_Critical_Exit消息:
这是VxD收到的最后一条消息。禁止中断,Simualte_Int和Exec_Int服务
不再有效。VxD应该复位与之相关的硬件设备,保证能够无问题地返回到
实模式。

Sys_Critical_Init消息:这是VxD收到的第一条消息。中断仍然不被允许,
所以VxD应该尽可能快地完成任务。大多数VxD完成下列任务:安装和初始
化需要支持来自设备的硬件中断和来自VMM或者其它VxD的软件中断的任何
函数,为设备提供需要单独使用V86模式内存页的申请,例如虚拟显示设备
申请显示内存。初始化VxD服务需要的任何数据,这通常包括读取
SYSTEM.INI文件中的设置。当处理此消息时,Simualte_Int和Exec_Int服
务必须不被使用。

Sys_VM_Init消息:
在Init_Complete消息之后VxD收到此消息。VxD应该初始化系统虚拟机的硬
件和软件状态。如果VxD设置进位标志返回,VMM终止所有进程并退出Windows。

Sys_VM_Terminate消息:
这是VxD收到的第一条系统虚拟机终止消息。VxD可以开始为虚拟机终止做准
备。Simulate_Int和Exec_Int服务有效,系统虚拟机总是最后一个被终止的
虚拟机。

System_Exit消息:
这是当系统终止时VxD收到的第一条消息。VMM在发送Sys_VM_Terminate消息之后发送此消息,允许中断,但Simualte_Int和Exec_Int服务不再有效。如果此消息
来自一个致命错误的结果,VxD可以通过修改系统虚拟机的内存以恢复系统状态,使得Windows能够终止而不死机。

VM_Critical_Init消息:
这是当一个新的VxD(虚拟机——译者注)被创建时VxD收到的第二条消息。
VxD可以通过设置进位标志返回以阻止虚拟机被建立。禁止中断,
Simualte_Int和Exec_Int服务不再有效。

VM_Init消息:
这是当一个新的VxD被创建时VxD收到的第三条消息。VxD应该初始化虚拟机的
硬件和软件状态,例如虚拟显示设备执行INT 10H功能设置初始显示模式。

VM_Not_Execute消息:
这是VxD收到的第二条虚拟机终止消息(如果虚拟机已经被虚拟外壳设备删除,
这是收到的第一条消息)。VxD可以通过检查EDX寄存器中的标志来查明终止原
因。Simulate_Int和Exec_Int服务对获得此消息的虚拟机不再有效。

VM_Resume消息:
当虚拟机的执行被恢复时VxD收到此消息,例如切换到前台时。VxD应该锁定
任何资源和为虚拟机重新开始准备内部结构。如果VxD设置进位标志返回,
VMM不恢复执行虚拟机。

VM_Suspend消息:
当虚拟机已经被挂起时VxD收到此消息,例如切换到后台时。VxD应该解锁任
何与虚拟机有关的资源。

VM_Terminate消息:
这是VxD收到的第一条虚拟机终止消息。VxD可以开始准备虚拟机的终止。
Simulate_Int和Exec_Int服务有效。


※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: deu.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.691毫秒