vxd是虚拟驱动程序.98,98,windows me 可以用.2000以后就不行了.对串口的控制完全是操作系统的事.
解决方案 »
- 问一个com接口多数据传输问题
- sql server最基本的连接字符串是什么样的?谁有例子?
- 请问在VC里变换了窗口有没有办法保留上个窗口的某些值?
- 谁会写Edit1中回车后,焦点跑到Edit中的代码,
- 100分解决一问题,解决后立即给分,为什么server收不到我的数据!!!
- 客户端无法定位服务器端的关闭事件
- ado的小问题
- vc调用com+组件的问题
- 在程序中直接设置纸张大小,不显示对话框?
- 如何把SDI的程序改为MDI?
- 》》》快来抢100分:如何改变属性页中tab标签的颜色,可以给它设置一个背景小图片吗?注意不是Page的颜色,仅是那个tab标签的颜色。答案可行立刻给分!
- 如何更改属性页中的“确定”、”取消“、”应用“、”帮助“的按钮文字?如何映射这些消息?可以添加新的按钮吗?
VMM是一个32位的保护模式程序。它的主要任务是建立和维护一个支持虚拟机的框架。例如,它要创建,运行和结束一个虚拟机。VMM是众多的系统VxD程序之一,它被放在你的系统目录下的VMM32.VxD文件中。VMM本身是一个VxD程序,但它被当作一个监视其他VxD程序的监视器。让我们来看一下Windows95的启动次序:
加载io.sys。
执行config.sys和autoexec.bat。
调用win.com。
win.com运行VMM32.VxD,VMM32.VxD实际上是个简单的dos的exe文件。
VMM32.VxD用xms驱动程序把VMM加载到扩展内存。
VMM初始化自身及其它的默认VxD。
VMM把机器转入到保护模式并创建系统虚拟机。
最后被加载的虚拟外壳设备在系统虚拟机上通过运行krnl386.exe来启动Windows。
krnl386.exe加载所有的文件,最后是Windows95外壳。
正如你所看到的,VMM是第一个被加载到内存的VxD程序。它创建系统虚拟机并初始化其他的VxD程序。它也为这些VxD程序提供许多服务。
VMM和VxD的操作模式和真正的程序不同。在大多数时候,它们是潜伏的。当应用程序在系统中运行时,这些VxD程序没有被激活。当某些需要它们处理的中断/错误/事件发生时,它们才被唤醒。
VMM是不可重入的。这意味着VxD程序必须使它们的访问和VMM服务同步。在有些情况下调用VMM服务是不安全的,比如VMM正在处理一个硬件中断。在这段时间内,VMM是不允许重进入的。作为一个VxD编写者,你必须对你的所作所为极度的小心。记住,你是在最高特权级别,第0层级别,如果你代码有错的话,谁也管不到。
虚拟设备驱动程序
虚拟设备驱动程序被简称为VxD。x 代表各种设备的名字,如虚拟键盘驱动程序(vkd),虚拟鼠标驱动程序(vmd)等等。VxD程序是硬件成功初始化的途径。记得dos程序认为它们拥有系统的一切,当它们在虚拟机中运行时,Windows需要给它们一个实机器的替身。VxD程序就是这些替身。VxD程序通常虚拟一些硬件设备,所以,例如当一个dos程序认为它在同键盘通讯时,实际是虚拟键盘驱动程序在和dos程序通讯。一个VxD程序通常控制真正的硬件设备并对该设备在各个虚拟机之间的共享进行管理。
尽管如此,并不是说每个VxD程序必须和一个硬件设备相连。虽然VxD程序是用来虚拟硬件设备的,但是我们也可以把VxD程序看作是在第0级别的dll。例如,如果你需要做一些只有在第0级别才能做的工作,你就可以编一个VxD程序来为你完成这个工作。这样,由于此VxD程序并没有虚拟任何设备,你就可以把它仅仅看作是你的程序的扩展。
在我们更深入的讨论VxD和创建我们的VxD程序之前,让我先说一些有关于VxD的事情。
VxD程序是Windows 9x特有的,它在Windows NT下不能运行。所以如果你的程序是依靠VxD的,它就不能被移植到Windows NT平台上去。
VxD是系统中权力最大的实体。由于它们可以对系统作任何事情,所以它们是极度危险的。一个恶意的/错误的VxD程序可以毁掉整个系统。对于恶意的/错误的VxD程序没有任何的保护措施。
通常的,不用VxD也有很多办法能达到你的目的。在采用VxD的解决办法之前一定要三思。如果用其他的可以在第三层级别实施的办法,就使用这个办法。