快速业务通道

使用Windows虚拟设备驱动程序(VxD)之2

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
ICODE

End_Service_Table VSAMPLED

上例中,Create_VSAMPLED_Service_Table符号在紧接服务表声明之前定义,指定Begin_Service_Table宏为VSAMPLED创建服务表。声明开始以

后,VSAMPLED_Service宏定义实际服务,这个宏是Begin_Service_Table宏创建的,只在服务表声明中有效。每个服务名必须与服务定义名,也就

是BeginProc宏给出的名字完全符合。

当声明服务时,如果一个服务定义在包含服务表声明的文件中,必须在服务名后使用LOCAL选项,也就是说如果不使用LOCAL选项,服务表自动声

明一个服务是外部服务。上例中,VSAMPLED_Get_Version服务定义在包含服务表声明的文件中。

与之相似,如果一个服务不是定义在VxD_CODE段中,必须在服务名后注明段名。上例中,VSAMPLED_Service_2服务定义在VxD_ICODE段中。

服务声明的顺序是很重要的。VxD中第一个被声明的服务必须是Get_Version服务(该服务清除进位标志并在AX寄存器中返回VxD版本号),任何加入VxD的新服务必须定义在服务表的末尾(或者定义在服务表中显式保留的空间中)。由于VMM依靠服务在服务表中的顺序正确链接

服务,在服务表中间插入一个新服务需要VxD使用的所有VxD服务被重建。

为了方便,服务表声明应该放在一个包含文件中,使得其它VxD可以通过包含该文件引入服务而不需要重新声明。

3、引入服务

一个VxD可以通过包含另一个VxD的服务表声明引入另一个VxD的服务,在这种情况下,设备指定符号的定义不能先于该服务表声明(参见上一节

的讲述)。例如:VSAMPLED.INC文件包含VSAMPLED服务的服务表声明,一个包含该文件的VxD可以调用这些服务。VxD使用VMMcall宏调用VMM服

务,使用VxDcall宏调用VxD服务。

由于计算机配置不同,一个VxD可能会在Windows启动时装载失败,这说明使用其它VxD提供的服务的VxD必须检验其它VxD服务在调用它们之前

是否有效。为了检验服务,调用服务的VxD必须尝试调用提供服务的VxD的Get_Version功能,如果VxD没有装载,VMM会设置进位标志并在AX寄

存器中返回0。

十一、VxD API过程

一个VxD提供V86模式和保护模式API过程以允许在一个虚拟机中运行的应用程序和其它软件访问该VxD的特征。如果要使这些可选的过程有效,

VxD必须将它们定义为Declare_Virtual_Device宏的参数,如果没有定义,VMM认为该VxD没有API过程。

在一个虚拟机中运行的应用程序或者其它软件通过设置BX寄存器为VxD标识并调用获取设备入口地址功能(INT 2FH 1684H功能)获取特定的虚

拟机的API过程的入口地址,VMM返回该地址使得应用程序可以间接调用该API过程。

当一个应用程序调用该入口地址时,VMM保存该应用程序的寄存器并调用VxD相应的API过程,保存当前虚拟机的句柄到BX寄存器中并保存

Client_Reg_Struc结构地址到EBP寄存器中。API过程必须检测客户寄存器的值(使用Client_Reg_Struc结构)以判断运行的API调用。

按照常规,大多数API过程使用AH寄存器指定主功能号,使用AL寄存器指定次功能号,其它客户寄存器用于附加参数。API过程通过修改客户寄

存器返回值,API过程可以修改EAX、EBX、ECX、EDX、ESI和EDI寄存器。

下面的实例给出了一个实例API过程——VSAMPLED_API_Get_Version:

BeginProc VSAMPLED_API_Get_Version

movzx eax, [ebp.Client_AX] ;取功能号

or eax, eax

jnz Undefined

Get_Version:

mov [ebp.Client_AX], 030AH ;在客户寄存器AX中返回值

and [ebp.Client_Flags], NOT CF_Mask ;清除进位标志

ret

Undefined:

or [ebp.Client_Flags], CF_Mask ;设置进位标志

ret

EndProc VSAMPLED_API_Get_Version

十二、VxD INT 2FH功能

VxD可以通过为INT 2FH中断安装回调过程提供INT 2FH功能。INT 2FH功能允许在一个虚拟机中运行的应用程序和其它软件在VxD不提供AP

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号