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

首頁 > 學院 > 開發設計 > 正文

羅云彬VxD教程--虛擬設備驅動程序初步

2019-11-17 05:34:09
字體:
來源:轉載
供稿:網友
在本教程里,我假定讀者對諸如虛8086模式,調頁,GDT,LDT,IDT之類的INTEL 80x86保護模式的操作比較熟悉。假如你不了解這些,那你要先在 http://developer.intel.com/design/pentium/manuals/閱讀INTEL的文檔。

內容:

Windows95是一個運行在最高級特權,第0層級別的多線程操作系統。所有的應用程序都運行在最低級特權,第3層級別上。這樣就限制了應用程序對系統的操作。它們不能使用cpu特權指令,不能直接訪問I/O端口,等等。你對gdi32,kernal32和user32這三個大的系統組件一定很熟悉。你肯定會認為這樣重要的代碼段一定是在第0層級別下運行的。但是實際上,它們和其他的應用程序一樣,是在第三層級別下運行的。這就是說它們并不比Windows計算器,或者掃雷游戲有更多的權限。系統的控制實權把握在虛擬級治理器(VMM) 和虛擬設備驅動程序(VxD)手中。
這一切都是由dos引起的。在Window 3.x的時代,在市場上有很多成功的dos軟件。Windows 3.x必須同時運行普通的Windows程序和dos程序,否則,它就會失去市場。
這個局面是很難處理的,因為dos程序和Windows程序有本質的不同。dos程序認為它們擁有系統的一切:鍵盤,cpu,內存,硬盤等等。dos程序不知道怎樣和其他程序合作,而Windows程序(從那時候起)是可靠的多任務合作系統。也就是每個Windows程序都必須通過GetMessage或PeekMessage來和其他程序進行交流。
解決辦法就是,在一個8086虛擬機上運行所有的dos程序,而在另一個叫做系統虛擬機的虛擬機上運行其他所有的Windows程序。Windows負責把cpu運算時間輪流的分給每個虛擬機。這樣,在Windows 3.x里。Windows程序之間用的是合作多任務,而虛擬機之間用的是優先級多任務。
什么是一個虛擬機?一個虛擬機是被軟件創建的一個假象。一個虛擬機和在它上面運行的程序交互,就像這個程序是在真正的機器上運行一樣。這樣,一個程序不知道也不關心自己是否是在虛擬機上運行。只要虛擬機準確的像一個真的機器一樣響應程序,我們就可以把它當成一個真正的機器。
你可以把虛擬機這種實機器和軟件之間的接口看作一種API。這種不平常的API由中斷,BIOS調用和I/O端口組成。假如Windows能夠以某種方法完美的模擬這個API,那么在虛擬機上運行的程序就會表現的和它們在實際器上運行時完全一樣。
這就是為什么會出現VMM和VxD的原因。為了協調和監視虛擬機(VMs),Windows需要一個程序來分配任務。這個程序就是虛擬機治理器(VMM)。

虛擬機治理器

VMM是一個32位的保護模式程序。它的主要任務是建立和維護一個支持虛擬機的框架。例如,它要創建,運行和結束一個虛擬機。VMM是眾多的系統VxD程序之一,它被放在你的系統目錄下的VMM32.VxD文件中。VMM本身是一個VxD程序,但它被當作一個監視其他VxD程序的監視器。讓我們來看一下Windows95的啟動次序:
  1. 加載io.sys。
  2. 執行config.sys和autoexec.bat。
  3. 調用win.com。
  4. win.com運行VMM32.VxD,VMM32.VxD實際上是個簡單的dos的exe文件。
  5. VMM32.VxD用xms驅動程序把VMM加載到擴展內存。
  6. VMM初始化自身及其它的默認VxD。
  7. VMM把機器轉入到保護模式并創建系統虛擬機。
  8. 最后被加載的虛擬外殼設備在系統虛擬機上通過運行krnl386.exe來啟動Windows。
  9. 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的解決辦法之前一定要三思。假如用其他的可以在第三層級別實施的辦法,就使用這個辦法。
Windows 95下有兩種VxD:
  • 靜態VxD
  • 動態VxD
靜態VxD是那些從系統啟動就被加載,在系統關閉之前一直存在于內存中的VxD程序。這種VxD可以追溯至Windows 3.x的時代。動態VxD時只有Windows 9x下才有的。動態VxD程序可以在需要的時候被加載/卸載。這些程序大多數都是用來控制設置治理器和輸入輸出監視器加載的即插即用設備的。你可以在你的win32應用程序里加載或卸載動態VxD程序。

VxD程序之間的通訊

VxD程序,包括VMM,通過以下三種途徑在相互之間進行通訊:
  • 控制消息
  • 服務API
  • 回調

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汉阴县| 敖汉旗| 高雄县| 收藏| 西昌市| 滁州市| 武平县| 黄平县| 汾阳市| 秭归县| 白水县| 延吉市| 江孜县| 樟树市| 汽车| 运城市| 珲春市| 衡阳县| 铜陵市| 乡城县| 吐鲁番市| 个旧市| 乐安县| 海阳市| 冷水江市| 庄河市| 浦县| 平塘县| 古蔺县| 平昌县| 湄潭县| 泰和县| 阿坝县| 彝良县| 闽清县| 呼图壁县| 沅江市| 靖远县| 麦盖提县| 红桥区| 栾城县|