WEB开发网
开发学院软件开发VC 使用Windows 95虚拟设备驱动程序 阅读

使用Windows 95虚拟设备驱动程序

 2010-07-20 20:44:57 来源:WEB开发网   
核心提示:VxD段VxD可以包含下面5个段的一些组合:1、VxD_CODE段:保护模式代码段(必须),该段包含VxD系统控制过程、回调过程、服务和API过程,使用Windows 95虚拟设备驱动程序(3),该段用宏VxD_CODE_SEG和VxD_CODE_ENDS定义开始和结束,也可命名为_LTEXT,宏为DDB建立了一个必须

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定义开始和结束,也可命名为_ITEXT。

4、VxD_IDATA段:保护模式初始化数据段(可选)。该段一般包括初始化过程和服务使用的数据,VMM在Init_Complete消息发生后丢弃此段。 该段用宏VxD_IDATA_SEG和VxD_IDATA_ENDS定义开始和结束,也可命名为_IDATA。

5、VxD_REAL_INIT段:实模式初始化段(可选)。该段包含实模式初始化过程和数据,VMM在加载VxD其它部分之前调用此过程,过程返回后丢弃此段,该段用宏VxD_REAL_INIT_SEG和VxD_REAL_INIT_ENDS定义开始和结束,也可命名为_RTEXT。除实模式初始化段以外,所有代码和数据段均为32位平坦内存模式的保护模式段,这就是说定义在保护模式段中的过程和数据均为32位的偏移量。当VMM装载VxD时,按照VxD在内存中的实际位置修正所有的偏移量。因此,在保护模式段中使用普通OFFSET指令处应该使用OFFSET32宏,OFFSET32宏定义的偏移量为连接器确定了正确的偏移量修正信息。

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

保护模式指令

VxD的源程序文件必须以.386p命令开始,以通知汇编器允许保护模式指令。虽然VxD工作在0特权级,但也不应该用保护模式指令去修改CPU 的运行,例如修改全局描述符(选择子——译者注)或中断描述符以及修改任务状态段或寄存器,这样做可能会对Windows运行有不利影响。唯一的例外情况是当该VxD为虚拟数学协处理器设备驱程序(VMCPD),允许修改CR0寄存器中的80387位。

包含(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显示对话框。

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实例——VSAMPLED V4.0 ,在对应的源文件必须定义名字为VSAMPLED_Control的设备控制过程。符号VSAMPLED_Device_ID和VSAMPLED_Init_Order说明非标准VxD的标识和初始化顺序,该VxD支持V86模式和保护模式API过程。VMM用宏定义的信息来初始化VxD并发送系统控制消息给VxD,并且允许MS-DOS 应用程序、设备驱动程序和TSR调用VxD。为了使VMM 存取这些信息,相应的宏建立一个设备描述块(DDB)并将其保存在保护模式数据段中(DDB的格式与VxD_Desc_Block结构相同),宏为DDB建立了一个必须在VxD连接时被显式引出的标号。在上例中,DDB 的名称是VSAMPLED_DDB。

上一页  1 2 3 4 5  下一页

Tags:使用 Windows 虚拟

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接