vxd程序設(shè)計(jì)入門_第1頁
已閱讀1頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論