国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

VxD的初始化和結束

2019-11-02 16:58:21
字體:
來源:轉載
供稿:網友

VxD程序分為兩種:靜態的和動態的。每種的加載方法都不同,接受到的初始化和結束的控制消息也不同。 

靜態VxD: 

下列情況下,VMM加載一個靜態VxD: 

一個實模式常駐程序通過調用中斷2FH,1605H,來調用此VxD。 

此VxD在注冊表中的如下位置有定義: 

HKEY_LOCAL_MACHINE//System//CurrentControlSet//Services//VxD//key//StaticVxD=VxD帶路徑文件名 

此VxD在system.ini中的[386enh]行下有定義:[386enh] section: 

device=VxD帶路徑文件名 

在開發的時候,我建議你從system.ini載入VxD程序,因為這樣如果你的VxD程序有錯而導致Windows不能啟動的話,你可以在Dos下修改system.ini,而如果你使用的注冊表載入的辦法,就無法修改了。 

當VMM加載你的靜態VxD程序時,你的VxD程序會按以下順序接收到三個系統控制消息: 

Sys_Critical_Init VMM在轉入到保護模式后,開放中斷前發出這個控制消息。大多數VxD程序到不要用到這個消息,除非: 

你的VxD程序要接管一些其他VxD程序或者保護模式程序要用到的中斷。既然你處理這個消息的時候這個中斷還沒有打開,你就可以確定在你接管這個中斷的時候此中斷不會被調用。 

你的VxD程序為其他的VxD程序提供了一些VxD服務。例如,一些在你的VxD程序后加載的VxD程序在處理Device_Init控制消息時需要調用一些你的VxD服務,既然Sys_Critical_Init 控制消息在Device_Init消息之前被發送,所以你應該在Sys_Critical_Init 消息發送時初始化你的程序。 

如果你要對這消息進行處理,你應該盡可能快的做完初始化工作,以免太長的執行時間導致的硬中斷丟失。(記住:中斷還沒打開) 

Device_Init VMM在開放中斷后發送此信息。大多數VxD程序都在得到這個消息時初始化。因為中斷都開放了,所以耗時的操作也可以在這里執行而不必怕會導致硬中斷的丟失。你可以在這時進行初始化(如果你需要的話)。 

Init_Complete 在所有的VxD程序處理完Device_Init 消息之后,VMM釋放初始化段(ICODE和RCODE段類)之前,VMM發出這個控制消息。只有少數幾個VxD要處理這個消息。 

你的VxD程序在成功地初始化后,必須將返回標志清零,反之,必須在返回之前把返回標志設為出錯信息。如果你的VxD不需要初始化,你就不必對這些消息進行處理。 

當要結束靜態VxD的時候,VMM發送如下的控制消息: 

System_Exit2 當你的VxD程序收到這個消息,Windows95正在關閉系統,除了系統虛擬機所有其他虛擬機都已經退出了。盡管如此,CPU仍然處于保護模式下,在系統虛擬機上執行實模式編碼也是安全的。在這時Kernel32.dll也已經被卸載了。 

Sys_Critical_Exit2 當所有的VxD完成對System_Exit2的響應處理并且中斷都被關閉后,你的VxD收到到這個消息。 

許多VxD程序并不要響應這兩個消息,除非你要為系統做轉換到實模式的準備。要知道,當Window95關閉時,它進入到實模式。所以如果你的VxD程序對實模式影像做了一些會導致它不穩定的操作,它就需要在這時進行恢復。 

你也許會感到奇怪:為什么這兩個消息后面都跟著個“2/" ”。這是因為:在VMM加載VxD程序的時候,它是按照初始化順序值小的VxD先加載的順序加載的,這樣VxD程序就可以使用那些在它們之前加載的VxD程序提供的服務。例如,VxD2要用到VxD1中的服務,它就必須把它的初始化順序值定義的比VxD小。加載的順序是: 

..... VxD1 ===> VxD2 ===> VxD3 ..... 

那么卸載的時候,理所當然的是初始化順序值大的VxD程序先被卸載,這樣他們仍然可以使用比它們后加載的那些VxD程序提供的服務。如上面的例子,次序是: 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 镇赉县| 韶山市| 阿克苏市| 启东市| 河北区| 股票| 镇安县| 长阳| 肥城市| 富川| 安泽县| 石屏县| 交口县| 邻水| 德昌县| 嵩明县| 元谋县| 芮城县| 伊宁市| 疏勒县| 永新县| 石城县| 明水县| 马龙县| 铁岭县| 辽中县| 淳安县| 湛江市| 尚志市| 新田县| 阜康市| 红河县| 安龙县| 乃东县| 改则县| 富民县| 西青区| 新丰县| 皋兰县| 香港| 静海县|