版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、VxD程序設(shè)計(jì)入門VxD的初始化和結(jié)束VxD程序分為兩種:靜態(tài)的和動態(tài)的。每種的加載方法都不同,接受到的初始化和結(jié)束的控制消息也不同。靜態(tài)VxD:下列情況下,VMM加載一個(gè)靜態(tài)VxD:一個(gè)實(shí)模式常駐程序通過調(diào)用中斷2FH,1605H來調(diào)用此VxD。此VxD在注冊表中的如下位置有定義:HKEY_LOCAL_MACHINESystemCurrentControlSetServicesVxDkeyStaticVxD=VxD帶路徑文件名此VxD
2、在system.ini中的[386enh]行下有定義:[386enh]section:device=VxD帶路徑文件名在開發(fā)的時(shí)候,我建議你從system.ini載入VxD程序,因?yàn)檫@樣如果你的VxD程序有錯(cuò)而導(dǎo)致Windows不能啟動的話,你可以在Dos下修改system.ini,而如果你使用的注冊表載入的辦法,就無法修改了。當(dāng)VMM加載你的靜態(tài)VxD程序時(shí),你的VxD程序會按以下順序接收到三個(gè)系統(tǒng)控制消息:Sys_Critical_
3、InitVMM在轉(zhuǎn)入到保護(hù)模式后,開放中斷前發(fā)出這個(gè)控制消息。大多數(shù)VxD程序到不要用到這個(gè)消息,除非:你的VxD程序要接管一些其他VxD程序或者保護(hù)模式程序要用到的中斷。既然你處理這個(gè)消息的時(shí)候這個(gè)中斷還沒有打開,你就可以確定在你接管這個(gè)中斷的時(shí)候此中斷不會被調(diào)用。你的VxD程序?yàn)槠渌腣xD程序提供了一些VxD服務(wù)。例如,一些在你的VxD程序后加載的VxD程序在處理Device_Init控制消息時(shí)需要調(diào)用一些你的VxD服務(wù),既然Sy
4、s_Critical_Init控制消息在Device_Init消息之前被發(fā)送,所以你應(yīng)該在Sys_Critical_Init消息發(fā)送時(shí)初始化你的程序。如果你要對這消息進(jìn)行處理,你應(yīng)該盡可能快的做完初始化工作,以免太長的執(zhí)行時(shí)間導(dǎo)致的硬中斷丟失。(記?。褐袛噙€沒打開)Device_InitVMM在開放中斷后發(fā)送此信息。大多數(shù)VxD程序都在得到這個(gè)消息時(shí)初始化。因?yàn)橹袛喽奸_放了,所以耗時(shí)的操作也可以在這里執(zhí)行而不必怕會導(dǎo)致硬中斷的丟失。你可
5、以在這時(shí)進(jìn)行初始化(如果你需要的話)。Init_Complete在所有的VxD程序處理完Device_Init消息之后VMM釋放初始化段(ICODE和RCODE段類)之前,VMM發(fā)出這個(gè)控制消息。只有少數(shù)幾個(gè)VxD要處理這個(gè)消息。你的VxD程序在成功地初始化后,必須將返回標(biāo)志清零,反之,必須在返回之前把返回標(biāo)志設(shè)為出錯(cuò)信息。如果你的VxD不需要初始化,你就不必對這些消比如:即插即用設(shè)備。盡管如此,你可以從你的Win32程序中加載卸載它,
6、也可以把它看作是你的程序的一個(gè)到ring0的擴(kuò)展。上一節(jié)我們提到的例子是一個(gè)靜態(tài)的VxD,你可以把它轉(zhuǎn)換成一個(gè)動態(tài)的VxD,只要在.def文件中VxD標(biāo)記的后面加上關(guān)鍵字DYNAMIC。VxDFIRSTVxDDYNAMIC這就是你把一個(gè)靜態(tài)VxD轉(zhuǎn)換成一個(gè)動態(tài)的VxD所要做的一切。一個(gè)動態(tài)的VxD可以按以下的方法被加載:把它放到你的Windows目錄下的SYSTEMIOSUBSYS目錄中。在這個(gè)目錄里的VxD會被輸入輸出監(jiān)視器(ios)
7、加載。這些VxD必須支持層設(shè)備驅(qū)動。所以用這種方法加載你的動態(tài)VxD并不是一個(gè)好辦法。用VxD加載服務(wù)。VxDLDR是一個(gè)可以加載動態(tài)VxD的靜態(tài)VxD。你可以在其他VxD里面或者在16位代碼里面調(diào)用它的服務(wù)。用Win32應(yīng)用程序里的CreateFileAPI。你在調(diào)用CreateFile時(shí),你的動態(tài)VxD要以下面的格式填寫:.VxD完整路徑名例如,如果你要加載一個(gè)在當(dāng)前目錄下名為FirstVxD的動態(tài)VxD,你需要做如下的工作:.da
8、taVxDNamedb“.FirstVxD.VxD“0.......datahDevicedd......code.....invokeCreateFileaddrVxDName0000FILE_FLAG__ON_CLOSE0movhDeviceeax......invokeCloseHlehDevice......FILE_FLAG__ON_CLOSE這個(gè)標(biāo)志用來說明該VxD在CreateFile返回的句柄關(guān)閉時(shí)被卸載。如果你用Cre
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 程序設(shè)計(jì)入門課程的雙語教學(xué)思考
- corba 程序設(shè)計(jì)指南(入門)
- proe模具設(shè)計(jì)入門
- proe模具設(shè)計(jì)入門
- 出納會計(jì)入門
- 機(jī)床電氣設(shè)計(jì)入門知識匯總
- 【模具】冷沖壓模具設(shè)計(jì)入門
- labview程序設(shè)計(jì)從入門到精通教學(xué)及習(xí)題
- 費(fèi)用審計(jì)入門指導(dǎo)(火)
- matlab程式設(shè)計(jì)入門篇初探matlab
- vb程序設(shè)計(jì)例題-程序改錯(cuò)程序填空程序設(shè)計(jì)
- 住宅區(qū)地下汽車庫設(shè)計(jì)入門
- 程序設(shè)計(jì)教案 程序設(shè)計(jì)——數(shù)據(jù)結(jié)構(gòu)
- catia_v5線束設(shè)計(jì)入門簡易教程
- pkpm軟件鋼結(jié)構(gòu)設(shè)計(jì)入門 2008版
- 會計(jì)入門必學(xué)—會計(jì)賬戶分類
- altium designer10電路設(shè)計(jì)入門教程
- 最簡單的c程序設(shè)計(jì)――順序程序設(shè)計(jì)
- 手把手教你結(jié)構(gòu)設(shè)計(jì)入門到熟練
- matlab程式設(shè)計(jì)入門篇影像顯示與讀寫
評論
0/150
提交評論