<b>利用Windows虚拟设备驱动程序(VxD)之2</b>[VC/C++编程]
本文“<b>利用Windows虚拟设备驱动程序(VxD)之2</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
8、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服务,比方初始化信息服务只在初始化历程中有效.
9、实情势初始化
任何静态设备驱动程序都可以供应实情势初始化历程以在Windows切换到保护情势之前履行初始化任务.VMM装载VxD时调用该历程,该历程查抄
有关的Windows环境,包含注册表和初始化文件中的有关设置以判断能否应当装载该VxD.该历程也可以给Windows返复书息认为每个虚拟机的实
例指定物理内存页保存给设备专用和数据项地址.要得到关于实情势初始化的更多信息,请参阅相关资料.
10、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存放器被改正.
以上是“<b>利用Windows虚拟设备驱动程序(VxD)之2</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |