分享
 
 
 

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

王朝system·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

一、VxD介绍

本文介绍VxD的作用。假如Windows 95提供的标准VxD对你的硬件或者软件不能提供100%的兼容支持,你需要为你的硬件或者软件(包括16位

和32位软件)创建VxD。假如你想让Windows用户使用你的硬件或者软件的某些新特征,你也可以创建VxD。

本文介绍如何写VxD,讲述了创建VxD所需的结构、过程和调用,还给出了创建和测试VxD的步骤。VxD可以是静态的或者动态装载的,下面的内

容主要讲述静态VxD,不过关于格式和功能的内容两者都适用。

二、什么是VxD

VxD是一个治理例如硬件设备或者已安装软件等系统资源的32位可执行程序,使得几个应用程序可以同时使用这些资源。Windows通过使用VxD允

许基于Windows的应用程序实现多任务。VxD在与Windows的连接工作中处理中断,并在不影响其它应用程序的执行的情况下为特定的应用程序执

行I/O操作。大多数VxD治理硬件设备,也有一些VxD治理或代替与之相关的软件,例如ROM BIOS例程。VxD可以包含必须在相应设备上执行的设备相关代码,也可以依靠其它软件去执行这些对设备的操作。任何情况下,VxD都会为每一个应用程序保留该设备状态的记录,保证无论何时一个应用程序继续执行该设备均处于正确状态。

一些VxD仅仅治理已安装软件,例如MS-DOS设备驱动程序或者TSR程序,这样的VxD通常包含仿真这些软件或者保护这些软件用于正在运行的应用

程序的数据的代码。VxD有时还用于提高已安装软件的性能,Intel兼容CPU执行32位的VxD比执行16位的MS-DOS设备驱动程序或者TSR程序有更高的效率。

三、标准VxD

Windows包括多种VxD,用于支持公共硬件设备和可安装软件。在某些情况下,可能需要修改VxD以提供新的特征或者支持非标准硬件。

Windows提供许多不预备修改,但能够辅助支持其他VxD的VxD。例如:许多VxD使用V86内存治理器(V86MMGR)和虚拟可编程中断控制器设备

(VPICD)提供的功能保存V86模式内存和答应硬件中断请求。要取得开发VxD的帮助,Windows 95设备驱动程序开发工具包(DDK)包括了大量可用设备驱动程序的源代码。

四、创建VxD

你可以通过修改VxD例子程序或者自己手工创建来创建VxD。你可以用汇编语言来写VxD,也可以用高级语言(例如C语言)来写一部分VxD。

要创建一个VxD,需要以下步骤:

1、阅读硬件手册中关于描述这种型号硬件VxD的章节。

2、写出所需的控制过程,VxD服务和API函数。

3、建立为VxD标识适当模块名的模块定义文件,并引出需要的设备描述块。

4、汇编连接VxD。

5、用调试版Windows 95测试VxD,要获得更多关于调试VxD的信息,请参阅相关资料(可以用Soft-ICE调试——译者注)。

6、为VxD和相关文件建立安装文件(INF文件),通过修改注册信息和向Windows的SYSTEM目录和相关目录拷贝文件来安装VxD。

7、建立最终发行软件包。

五、你需要怎样开始

本文假定你是一位有经验的汇编语言程序员,而且熟悉Intel兼容处理器的指令集和系统结构。在某些非凡情况下,你还应该懂得下列内容:

保护模式和虚拟8086(即V86——译者注)模式。

平坦内存模式

中断和异常处理

保护和特权级

段和页式内存治理以及错误处理

输入和输出保护以及错误处理

本文也假定你已经熟练了解专门硬件的特征和相应的ROM BIOS例程以及其他可安装软件。

六、写一个VxD

许多情况下,写一个VxD用来代替一个由Windows 95提供的标准VxD。然而,大多数情况下,写一个VxD是用来支持新硬件设备或者软件的,在这

种情况下,通常手工创建一个VxD比修改已经存在的VxD要轻易,原因是大多数VxD都是设备相关的。然而,已存在VxD的源代码需要尽可能地仔

细分析,原因是它们可能包含通用的格式和结构,以及说明怎样使用VMM和VxD服务去实现有用的功能。

写一个VxD需要下列步骤:

1、建立包含VxD各个段,VxD声明,设备控制过程,处理系统控制消息过程的基本部分和API过程的基本部分的VxD框架。

2、加入实模式初始化过程(可选)。

3、完成处理初始化消息的过程。这些过程应该能够初始化控制块,分配全局内存以及安装中断、I/O捕捉和页错误回调过程。

4、完成处理不同中断和错误的回调过程。

5、为服务加入服务表定义和声明(可选)。

6、完成API过程(可选)

7、完成处理系统控制消息的过程以建立和删除虚拟机。

在写一个VxD的过程中,你可以安装该VxD并在调试器控制下运行Windows,在该VxD中设置断点监视该VxD治理的中断,这样可以帮助你查明该VxD是否正确工作。

1、VxD段

VxD可以包含下面5个段的一些组合:

1、VxD_CODE段:保护模式代码段(必须)。该段包含VxD系统控制过程、回调过程、服务和API过程。该段用宏VxD_CODE_SEG和VxD_CODE_ENDS

定义开始和结束,也可命名为_LTEXT。

2、VxD_DATA段:保护模式数据段(必须)。该段包括设备描述表、服务表和部分VxD全局数据。该段用宏VxD_DATA_SEG和VxD_DATA_ENDS定义开

始和结束,也可命名为_LDATA。

3、VxD_ICODE段:保护模式初始化代码段(可选)。该段一般包括只在VxD初始化过程中使用的过程和服务,VMM在Init_Complete消息发生后丢弃

此段。该段用宏VxD_ICODE_SEG和VxD_ICODE_ENDS定义开始和结束,也可命名为_99vEXT。

4、VxD_IDATA段:保护模式初始化数据段(可选)。该段一般包括初始化过程和服务使用的数据,VMM在Init_Complete消息发生后丢弃此段。该

段用宏VxD_IDATA_SEG和VxD_IDATA_ENDS定义开始和结束,也可命名为_IDATA。

5、VxD_REAL_IN99v段:实模式初始化段(可选)。该段包含实模式初始化过程和数据,VMM在装载VxD其它部分之前调用此过程,过程返回后丢弃

此段,该段用宏VxD_REAL_IN99v_SEG和VxD_REAL_IN99v_ENDS定义开始和结束,也可命名为_RTEXT。

除实模式初始化段以外,所有代码和数据段均为32位平坦内存模式的保护模式段,这就是说定义在保护模式段中的过程和数据均为32位的偏移

量。当VMM装载VxD时,按照VxD在内存中的实际位置修正所有的偏移量。因此,在保护模式段中使用普通OFFSET命令(伪操作,下同——译者注)

处应该使用OFFSET32宏,OFFSET32宏定义的偏移量为连接器确定了正确的偏移量修正信息。

VxD不能改变CS、DS、ES和SS段寄存器,VxD能够使用FS和GS段寄存器。

2、保护模式指令

VxD的源程序文件必须以.386p命令开始,以通知汇编器答应保护模式指令。虽然VxD工作在0特权级,但也不应该用保护模式指令去修改CPU的

运行,例如修改全局描述符(选择子——译者注)或中断描述符以及修改任务状态段或寄存器,这样做可能会对Windows运行有不利影响。唯一的

例外情况是当该VxD为虚拟数学协处理器设备驱动程序(VMCPD),答应修改CR0寄存器中的80387位。

3、包含(Include)文件

包含文件定义了VxD需要的宏、结构、符号和服务表,用于声明段和过程以及使用VMM和其它VxD服务。下面是每个包含文件包含的公共服务定义、

宏和符号定义列表:

1、VMM.INC:包含所有的VMM服务以及所需的宏和符号,例如Declare_Virtual_Device和VMMCall。

2、DEBUG.INC:包含在调试终端上输出信息和执行各种数据检查的宏。这些宏的功能由定义了调试符号的VxD在汇编时该文件生成的代码实现。

3、VPICD.INC:包含为虚拟可编程中断控制器设备(VPICD)定义的所有服务、宏和符号。VPICD处理所有的中断,所以许多VxD需要VPICD服务。

4、SHELL.INC:包含虚拟外壳设备提供的公共服务的定义。虚拟外壳设备提供对例如MessageBox这样的Windows函数的调用,可以让VxD显示对话框。

4、VxD声明

每一个VxD都要声明一个名称、一个版本号、一个初始化顺序和一个设备控制过程,许多虚拟设备驱动程序还声明一个设备标识和一些API过程。

VxD一般使用Declare_Virtual_Device宏来实现这些声明,例如:

Declare_Virtual_Device VSAMPLED, 4, 0, VSAMPLED_Control, \

VSAMPLED_Device_ID, VSAMPLED_Init_Order, \

VSAMPLED_V86_API_Handler, \

VSAMPLED_PM_API_Handler

本例声明了一个VxD实例—

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有