快速业务通道

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

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

八、VxD初始化

VMM初始化一个VxD时做下列工作:

1、装载实模式初始化段并调用实模式初始化过程。该过程可以完成阻止装载VxD,阻止启动Windows,指定设备实例数据和在内存中选择页面给

设备专用的工作。

2、装载VxD其它段到32位平坦内存模式的保护模式内存,并丢弃实模式初始化段。

3、发送Sys_Critical_Init消息到设备控制过程。禁止硬件中断,所以VxD应该尽可能地用较少的时间完成自身初始化。

4、发送Device_Init消息到设备控制过程。允许硬件中断,所以必须准备让VxD管理来自设备的中断。

5、发送Init_Complete消息到设备控制过程。

6、丢弃初始化代码和数据段,释放其它被使用的内存。VxD不能在处理完Init_Complete消息以后试图存取这些段中的过程和数据。

在初始化过程中的任何时刻,VxD都可以设置进位标志返回到VMM以阻止装载VxD。部分VMM服务,例如初始化信息服务只在初始化过程中有效。

九、实模式初始化

任何静态设备驱动程序都可以提供实模式初始化过程以在Windows切换到保护模式之前执行初始化任务。VMM装载VxD时调用该过程,该过程检查

有关的Windows环境,包括注册表和初始化文件中的有关设置以判断是否应该装载该VxD。该过程也可以给Windows返回信息以为每个虚拟机的实

例指定物理内存页保留给设备专用和数据项地址。要获得关于实模式初始化的更多信息,请参阅相关资料。

十、VxD服务

VxD可以提供服务功能(函数或过程——译者注)给VMM和其它VxD使用。这些服务让其它VxD可以直接访问该VxD的特征,允许测试和修改该VxD的功能和能力。

VxD不能和Windows DLL一样引出函数,代之的是VMM通过INT 20H提供到VxD服务的动态链接,该中断处理过程使用服务编号判断支持服务的

VxD,该中断处理过程也使用服务编号查询在VxD服务表中的服务地址。

下面的内容讲述怎样在VxD中定义服务,声明VxD服务表以及从一个VxD向另一个VxD中引入服务。

1、定义服务

VxD使用BeginProc和EndProc宏以及Service和Async_Service选项定义服务。宏标记服务过程代码的开始和结束,选项标识该过程是一个服务。

下面的实例给出了VSAMPLED_Get_Version服务的定义:

BeginProc VSAMPLED_Get_Version, Service

mov ax, 030Ah

clc

ret

EndProc VSAMPLED_Get_Version

Async_Service选项标识该服务可以被异步调用,也就是说在处理中断的过程中调用。异步服务必须是可重入的,而且不能调用VMM和不是异步服

务的VxD服务。

VMM和标准VxD对服务使用两种调用约定:基于寄存器的调用约定和基于32位C语言的调用约定。这两种调用约定有不同的服务名格式,参数传递

和返回值方法以及寄存器保护。

对于基于寄存器的服务,服务名不应该以下划线(_)开头,所有的参数通过寄存器传递,结果也通过寄存器返回,服务保护所有不显式用于返回

值的寄存器。

对于基于C语言的服务,服务名必须以下划线(_)开头,所有的参数通过堆栈中的32位值传递,结果(如果存在)通过EAX寄存器(32位值)

或者EAX和EDX寄存器(64位值)返回,服务保护EBX、ES、FS和GS寄存器以及ESI和EDI寄存器,只有标志寄存器和EAX、EBX、EDX寄存器被修改。

2、声明服务

VxD使用Begin_Service_Table和End_Service_Table宏声明服务。宏标记包含服务名和可选的包含服务的段名的列表的开始和结束。声明必须建

立在进行VxD定义的文件中(也就是说在包含Declare_Virtual_Device宏的文件中),而且必须先进行设备指定符号的定义。下面的实例给出了

一个实例VxD——VSAMPLED的服务表声明:

Create_VSAMPLED_Service_Table equ 1

Begin_Service_Table VSAMPLED

VSAMPELD_Service VSAMPLED_Get_Version, Local

VSAMPLED_Service VSAMPLED_Service_1

VSAMPLED_Service VSAMPLED_Service_2, VxD_

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号