User:Hyddd
Welcome to The Wiki of Hyddd
* Main Page Of Hyddd
编程高手箴言--笔记_3.2.1
- 消息机制:
* Windows 16位,消息机制:
* 一直等待消息,直到有消息发生时
*
* while( GetMessage(&msg ,NULL , 0 ,0 ) ){
* TranslateMessage(&msg); //翻译消息
* //... ...
* DispatchMessage(&msg); //分配消息到对应的窗口
* }
* GetMessage: 而GetMessage就会一直停止在这些函数上,直到有消息为止。
* PeekMessage: 和GetMessage不同的是,当消息队列中有消息时,它会返回函数;没有消息时就会返回0
* Windows 32位,消息机制: * 和16位Windows的消息运行基理很不一样,所有的消息队列看上去是放在USER32的模块内,但每个应用程序自己有一个USER32, * 因为每个应用程序在内存内都是从4000000B(也就是4MB的位置开始的),这样,每个GetMessage和PeekMessage都在处理事件。实际上, * 每个GetMessage就会成为一个WaitsingleMessage,当有事件来后,就直接进行处理,也不用做什么调度。因为自己完成自己的消息处理, * 每个程序都是独立的,所以要用底层内核来实现页面的切换。它某一程序切入时,其他程序就会被切出。当切换出去时,整个消息队列也就被切换出去了。 * 所以,整个消息的处理就很简单了。 * Windows 32位时的消息机理下图所示:
[[Image:Win32 Message.JPG|]]
编程高手箴言--笔记_3.1.4
- LE文件格式:
* 为什么出现LE文件格式: * VxD采用线性可执行文件格式(LE)。这种文件格式是为OS/2 2.0版设计的。它同时包含16位和32位代码,这也是VxD程序的需要。 * 回想VxD在Windows 3.x的时代,从DOS启动Windows,Windows在把机器转到保护模式之前,需要在实模式下做一些初始化。 * 实模式的16位代码必须和32位代码一起放在可执行文件中。所以,LE文件格式成为理所当然的选择。 * Windows NT驱动程序不必在实模式下初始化,所以它们不必使用LE文件格式。它们用的是PE文件格式。
编程高手箴言--笔记_3.1.3
- DDB结构:
* 在了解什么是DDB前,先看一幅图:
* 设备描述块(The Device Descriptor Block)简称DDB,是VMM联系VxD的句柄。DDB中包括了VxD的信息和指向VxD主要的入口指针。当然,为了给其他的应用程序使用,也可以包括指向其他入口的指针。
- DDB数据结构:
* 字段区域 描述 * Name 8个字节的VxD名称 * Major Version VxD的主版号,与Windows的版本号无关 * Minor Version VxD的从版号,与Windows的版本号无关 * Device Control Procedure 设备控制过程的地址: VxD程序的设备控制函数的名字,可以把设备控制函数看做Windows函数的等价物。 * Device ID Microsoft分配的惟一的ID号 * Initialization Order 通常是Undefine_Init_Order 。如果要强制在某个指定的VxD初始化之前或结束之后进行初始化,那就在VMM.INC中找到相应的Init_Order加1或减1。 * Service Table 服务表的地址 * V86 API Procedure V86 API函数的地址 * PM API Procedure PM API函数的地址
- VxD的事件处理
* 当实模式初始化完成后,VMM将通过专门的消息方法来通知所有的VxD发生了什么。VxD的消息处理就像Windows的窗口消息处理一样,能通过如下一组切换函数:
*
* switch (事件){
*
* case 系统初始化事件
*
* 处理此消息代码
*
* case VM初始化
*
* 处理此消息代码
* …
*
* case 其他
* …
*
* }
* 为了给VxD发送消息,VMM就会从VxD的DDB中取得设备控制函数的地址,在EAX中放置的是消息的值,EBX中放入当前VM的句柄,接着调用对应的函数。
编程高手箴言--笔记_3.1.2
- VxD再叙:
* 就在第0级工作,并且有极高的权限,所以VxD能访问任何的硬件,不仅可以访问任何的物理空间,还可以捕获软件中断和I/O端口以及其他程序对内存的访问,就连硬件中断也可以被它捕获。
- VxD装入系统:
1. 静态装入: VxD可以和VMM一起被静态地装入系统。 2. 动态装入: 由应用程序主动地装入系统。
- VxD的组成:
* 安装一个VxD的过程有下面几个部分: . 实模式的初始化代码和数据在完成以下4部分后,被系统销毁。 . 保护模式 -- 初始化代码部分,完成后销毁。(个人理解: 为进入保护模式做准备的代码,所以进入保护模式后,代码可以废弃。) . 保护模式 -- 初始化代码数据,完成后销毁。(个人理解: 为进入保护模式做准备的数据,所以进入保护模式后,数据可以废弃。) . PM代码,包括设备过程、API和回调过程,以及服务例程。 . PM数据,包括设备描述符块、服务表,以及全局数据。
- VxD加载过程:
* Win 9x支持静态和动态两种加载模式。
* 静态加载: VxD是在Windows初始化时被自动加载的,只有当Windows结束运行后,它才会卸载。 * 静态加载方法1: 直接在SYSTEM.INI中加入如下一行代码:Device =VxD_NAME。 * 静态加载方法2: 可以在Windows 9x注册表中的HKEY_LOCAL_MACHINE\ System\CurrentControlSet\Services\VxD\key\StaticVxD子键下加入如下的VxD的路径和名字:VxD_NAME=PATHNAME。 * 动态加载: VxD不是和VMM一起在Windows启动时一起装入内存的,而由应用程序或另外的VxD装入,并且也可以通过VxD或其他应用程序动态地删除,所以,动态的VxD就有很大的灵活性。
编程高手箴言--笔记_3.1.1
- 早期Windows和Dos的一些机制:
. Dos系统会出现严重的资源冲突问题。 . Windows为了兼容Dos程序,通过虚拟设备(VxD)的方法模拟每个Dos程序都有拥有所有的设备资源,实际上这个就是虚拟机(VM)的概念。
- 一些基本概念:
. VxD: x表示任意设备。 . VDD: 虚拟显示设备。 . VDMAD: 表示虚拟DMA设备。
. VMM: 虚拟机管理器:它控制着计算机的主存、CPU的执行时间和外围设备功能。 . VMM是一个32位的保护模式程序。它的主要任务是建立和维护一个支持虚拟机的框架,并对每个VM提供服务。
. VxD程序是Windows 3.1和Windows 9x特有。在NT下不能运行。 . 虚拟机管理器(VMM)是Windows 9x操作系统的真正内核。 . 所有的Win32的进程都运行在一个叫System VM中。
- 我VM-VMM-VXD的理解:
. VM--通过VMM调用下面的-VXD程序(设备模拟程序),从而达到控制所有虚拟设备的效果。 . 常用VM--两种 : System VM , Dos VM.
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.