《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > Windows 9x內核模式驅動程序的設計與策略

Windows 9x內核模式驅動程序的設計與策略

2009-04-16
作者:譚章熹

  摘 要: 在Windows 98或Windows 95下如何高效編寫硬件設備驅勸程序是微機應用開發中迫切需要解決的問題。介紹了虛擬設備驅動程序(VxD)在Windows 9x下運行的機理和通信策略,以及如何設計內核模式驅動程序。
  關鍵詞: 保護模式 VMM VxD DPMI


  1995年Microsoft公司推出了其新一代的桌面操作系統Windows 95,從技術層面來看它是為發揮32位處理優越性能而設計的一個32位操作系統。而它出色的穩定性,強大的尋址能力,無不歸功于對32位處理保護模式的充分應用。具體來講,它利用了80386的保護機制,從操作系統到一般應用程序分別分到4個特權層上,操作系統享有最高的優先級,被安排在ring-0上運行,而優先級最低的普通應用程序被安排在ring-3上運行。這樣做的好處是如果一般的應用程序在ring-3上崩潰將不會影響到ring-0的操作系統,另一方面也是對在ring-3上的應用程序所能訪問到的資源做了一定的限制,從而大大降低了因應用程序直接操作而產生的意外錯誤。換句話說,在Windows 98或Windows 95下,應用程序不能像在實模式下可以隨意操作硬件資源,而需要通過編寫運行在內核模式(ring-0)的虛擬設備驅動程序(virtual device driver)才能達到目的。因此,在Windows 9x下如何高效編寫硬件設備驅動程序是微機應用開發中迫切需要解決的問題。
1 Windows 9x系統結構
  確切的說Windows 9x不是一個操作系統,而是一個操作系統的集合。當計算機運行在保護模式下時,有“兩個”操作系統同時存在,即Windows 本身和一個更低的操作系統,我們把它稱為VMM/DPMI(virtual machine manager/Dos protect mode interface)。VMM的主要目的是管理同時運行的32位保護模式Windows應用程序(Win32 applications)以及運行在虛擬86模式下的MS-Dos程序,前者稱為“線程”(threads),后者稱為VM(virtual machine)。VMM使每一條線程擁有自己的獨立地址空間,使每一個VM都“單獨”占有CPU,并為它們提供各種服務。從圖1中我們可以看出,threads和VMs所能訪問到的資源已不是直接的物理資源,而是被VMM虛擬化(virtualized)后的虛擬資源了。


  另外,VMM是一個可擴充的“操作系統”,它的核心部件以及標準部件(比如,DMA控制器管理VDMAD,中斷管理VPICD等)是由Microsoft提供的。但我們可以編寫一些擴充模塊,也就是用VxD來增強VMM對硬件的虛擬能力,使整個操作系統獲得對新硬件的訪問能力。不僅如此,這種擴充操作系統的辦法,還能為Win32程序與MS-DOS程序之間的通訊提供一種新的途徑以代替傳統的MS-DOS設備驅動程序以及內存駐留程序TSRs。從某種意義上說,沒有VxD不能完成的事情,而且由于VxD是運行的保護模式下,所以它并不占有寶貴的常規內存。此外,運行實模式MS-DOS驅動程序所導致的模式切換也不復存在。因此一般來講,VxD的運行速度要高出MS-DOS驅動程序一倍以上。更重要的是VxD在Windows 9x下可以動態裝入與卸載而不需要重新啟動計算機,這就大大提高了系統的靈活性,同時也為即插即用(Plug and Play)提供了可能。與實模式的驅動程序相比,可動態裝、卸載可謂是一場革命。
2 VxD的結構及通訊策略
  普通的Win32應用程序都是PE格式(Portable Exectable Format)的,而VxD則不同,它沒有一般程序的進出口而是輸出一種稱作設備描述塊DDB(Device Descriptor Block)的數據結構。它包括VxD設備ID、初始化順序、Win32DeviceIOControl回調函數句柄、V86API句柄、PM API句柄等VMM在調用VxD時所需要的重要信息。此外,同其他應用程序一樣,VxD由五個段構成,它們分別是:
  (1)VxD_CODE段:保護模式代碼段。該段包含VxD系統控制過程、回調過程、服務和API過程。
  (2)VxD_DATA段:保護模式數據段。該段包括設備描述表、服務表和部分VxD全局數據。
  (3)VxD_ICODE段:保護模式初始化代碼段(可選)。該段一般包括只在VxD初始化過程中使用的過程和服務,VMM在Init_Complete消息發生后丟棄此段。
  (4)VxD_IDATA段:保護模式初始化數據段(可選)。該段一般包括初始化過程和服務使用的數據,VMM在Init_Complete消息發生后丟棄此段。
  (5)VxD_REAL_INIT段:實模式初始化段(可選)。該段包含實模式初始化過程和數據,VMM在裝載VxD其它部分之前調用此過程,過程返回后丟棄此段。
  當VxD裝入內存時,VxD通常要靠DDB中所添入的一個16位的VxD設備ID,以區別于其它VxD。為了防止與其他新VxD沖突,Microsoft通過請求和注冊標識來保證自己的VxD設備ID沒有被其它廠商使用,為此Microsoft保留0~01FFH之間的所有VxD設備ID供自己使用。
  在編寫VxD時首先要編寫VMM的消息處理函數,以便作相應的處理。例如,在VxD裝入內存時VMM對能動態裝載的VxD發出SYS_DYNMAIC_DEVICE_INIT消息,在要求卸載VxD時VMM又向其發出SYS_DYNAMIC_DEVICE_EXIT消息。在VxD中只需編寫相應的處理函數,便可達到設備初始化與卸載釋放資源的目的。拿Win32程序來說,它使用CreateFile API函數打開可動態裝、卸載的VxD時VMM便會發出SYS_DYNAMIC_DEVICE_INIT消息。相應的,當它使用CloseHandle API函數卸載VxD時VMM便會發生SYS_DYNAMIC_DEVICE_EXIT消息。
  另外,在具體調用VxD中的函數時,也不像調用ring-3 DLL中的函數那樣容易。我們以調用對象不同分以下幾種情況討論:
  (1)從其他VxD中調用(ring-0調用ring-0)
  當生成VxD時,所有可以被其他VxD調用的函數都列在一個數組里,我們稱這種函數為一個服務(Service)、這個數組為服務項目表(Service_Table)。在調用時,并不是用服務的名稱而是直接使用該函數在數組中的索引號。例如對VMM中的1號服務Get_Cur_VM_Handle
  可采用如下格式:
  int 20h
  DD00010001h
  32位的DD由兩部分組成,它的高字包含了VxD設備的ID,低字包含了服務號(這里VMM的設備ID為0001h)。
  (2)從V86代碼或Win16(保護模式)代碼中調用(ring-3調用ring-0)
  這里應用程序要申請被調用的VxD函數地址,這個地址可以通過int 2Fh/AX=1648h調用獲得。為了識別是調用哪一個VxD的函數,調用時可令BX=VxD設備ID。當int 2Fh指令返回時,寄存器ES:DI(對保護模式有ES:EDI)包含一個seg:offset(對保護模式有selector:offset)指針,調用該指針就可以把控制權交給運行在ring-0下的VxD。
  (3)從Win32代碼中調用(ring-3調用ring-0)
  事實上Microsoft隱藏了Win32的VxD服務接口,作為替代提供了Windows NT下的設備輸入、輸出控制(DeviceIOControl)Win32 API。Win32程序通過使用此函數向特定的VxD發送控制碼與數據。與此相應在編寫VxD時要提提供一個相應的回調函數以響應它所發出的W32_DeviceIOControl消息,并再去回調函數中響應相應的控制碼,最后還要把該回調函數的句柄添加到DDB中。它的定義如下:
  BOOL DeviceloControl(
  HANDLE hDevice,//用CreateFile API函數打開VxD設備獲得的句柄
  DWORD dwloControlCode,//ring3程序向VxD傳遞的命令碼(可由編程寫者自定)
  LPVOID lnBuffer,//ring3程序傳給VxD的數據緩存的地址
  DWORD nlnBufferSize,//ring3程序傳給VxD的數據緩存的字節數
  LPVOID lpOutBuffer,//VxD的返回數據所存放的緩存地址(該緩存由ring-3預留)
  DWORDnOutBufferSize,//VxD的返回數據所存放的緩存的字節數
  LPDWORD lpBytesReturned,//VxD實際返回數據的字節數
  LPOVERLAPPED lpOverlapped //一個OVERLAPPED的結構地址,通常為NULL);
  由此不難看出這種DeviceIOControl的結構也為VxD向ring-3回傳數據提供了一種途徑。這種通訊方式在NT的設備驅動程序中也得到了廣泛應用,它是Microsoft大力提倡的Win32程序應采用的一種通訊方式。
3 VxD的實現
  從編程工具方面來看,我們需要Windows95 DDK和一個32bit的匯編編譯器,如MASM6.11c,如果打算用C/C++開發驅動程序的話,還應選用一個32bit的C/C++4.0編譯器,筆者推薦采用Micrfoft Visual C++ 4.0以上的版本,因為它支持一種新的關鍵字——declspec(naked) 。采用該關鍵字的函數,編譯器將不為其生成相應的函數進出口代碼,這樣對于采用特殊函數結構的VxD函數來說是非常方便的。除此之外,也有一些公司提供了一些VxD向導器以幫助用戶生成C/C++的程序框架,使用它們可以大大提高開發效率,應予以考慮,其中最著名的有Vtoolsd95, VxDwriter等。在編程中應注意,不要使用C/C++所提供的庫函數,特別是Microsoft的MFC,因為它們都是運行在ring-3上的,如果非用不可的話,只有一些個別函數能通過使編譯器生成嵌入式指令來達到目的,但這樣做是要相當小心的。另外,調試運行在ring-0的驅動程序是相當困難的,VC++以及MASM中的調試均不能滿足需要,而需采用內核級的調試工具比如Microsoft的WDEB386以及Numega的SoftIce等。
4 VxD的局限性
  VxD技術只適用于Windows 9x操作系統,Windows NT不支持此項技術,而是采用更為先進的面向對象的驅動程序模型,例如Window 98和Window 2000就采用了一種基于NT的驅動程序模型WDM。此外,由于VxD運行在ring-0上根本不受ring-3的制約,也給病毒的制造者即黑客以可乘之機,比如著名的CIH病毒是一個VxD。
參考文獻
1 Microsoft Develop Network Library 98;6(5)
2 Writes,Ruediger R.Asche.What's New in Windows 95 for VxD Microsoft Developer Network Technology Group
3 Ruediger R.Ashe.The Little Device Driver,Microsoft Development Network Technology group
4 Win 9x虛擬設備驅動程序編程指南.清華大學出版社,1999.3

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美一区免费视频| 极品尤物久久久av免费看| 国产精品福利在线观看| 禁断一区二区三区在线| 久久久噜噜噜久久人人看| 国产精品福利av| 在线观看91精品国产入口| 欧美成人在线影院| 欧美精品一区二区在线观看| 亚洲一级在线| 欧美激情亚洲视频| 久久午夜电影网| 免费人成精品欧美精品| 亚洲二区精品| 国产精品私拍pans大尺度在线| a4yy欧美一区二区三区| 欧美精品在线免费播放| 亚洲美女在线视频| 国产精品一区二区三区久久| 国产精品入口尤物| 91久久精品国产91久久| 久久久www成人免费毛片麻豆| 国产专区综合网| 亚洲欧美日韩国产中文| 欧美激情中文字幕在线| 亚洲午夜免费视频| 欧美图区在线视频| 欧美精品在欧美一区二区少妇| 猫咪成人在线观看| 亚洲国内高清视频| 你懂的一区二区| 欧美另类69精品久久久久9999| 亚洲高清一区二区三区| 在线日本成人| 久久丁香综合五月国产三级网站| 久久精品视频在线观看| 免费久久99精品国产自在现线| 在线观看一区二区视频| 精品成人国产在线观看男人呻吟| 欧美人与性动交α欧美精品济南到| 国产欧美亚洲视频| 欧美自拍丝袜亚洲| 国产精品亚洲综合一区在线观看| 国产精品久久久久久久久久久久| 亚洲人成欧美中文字幕| av成人福利| 欧美精品色一区二区三区| 久久久久久9999| 99国产精品视频免费观看一公开| 国产在线国偷精品产拍免费yy| 国产在线一区二区三区四区| 亚洲精品中文字幕有码专区| 国产精品国产三级国产普通话三级| 欧美激情导航| 国产精品私拍pans大尺度在线| 国产精品久久中文| 国产伦精品一区二区三| 久久av一区二区三区亚洲| 亚洲毛片在线观看| 亚洲欧美日韩在线综合| 久久天天躁狠狠躁夜夜爽蜜月| 国产在线一区二区三区四区| 亚洲精品中文在线| 国产欧美韩日| 欧美久久久久久久久久| 国产精品免费网站在线观看| 国产精品成人一区二区三区夜夜夜| 久久性色av| 亚洲国产天堂网精品网站| 国产精品普通话对白| 欧美亚洲免费高清在线观看| 一区二区三区国产精华| 久久漫画官网| 在线一区二区日韩| 亚洲风情在线资源站| 欧美午夜精品理论片a级大开眼界| 亚洲国产精品悠悠久久琪琪| 国产麻豆视频精品| 日韩亚洲精品在线| 欧美精品videossex性护士| 久久综合网色—综合色88| 国产一区二区三区日韩| 欧美日韩精品不卡| 国产一区二区久久久| 伊人一区二区三区久久精品| 午夜亚洲激情| 亚洲精品少妇30p| 欧美手机在线视频| 亚洲欧美一区在线| 亚洲欧美国产精品桃花| 一区二区三区我不卡| 欧美美女喷水视频| 蜜桃av噜噜一区| av成人福利| 99国产精品久久久| 久久久久.com| 免费视频一区二区三区在线观看| 欧美日韩成人网| 日韩视频一区二区三区| 国产精品天天看| 欧美日一区二区在线观看| 欧美日韩卡一卡二| 久久久久久久综合狠狠综合| 亚洲一级网站| 久久国产精品久久久久久| 欧美午夜电影一区| 国产在线精品一区二区中文| 久久久噜噜噜久久中文字幕色伊伊| 欧美福利电影网| 精品动漫一区| 99国产精品一区| 日韩视频一区二区三区| 欧美一区二区三区四区在线| av成人免费在线观看| 久久嫩草精品久久久精品一| 宅男噜噜噜66国产日韩在线观看| 免费中文字幕日韩欧美| 欧美在线观看网址综合| 久久综合狠狠综合久久激情| 欧美视频二区36p| 欧美日韩精品免费观看视频完整| 免费久久99精品国产| 久久久久高清| 99www免费人成精品| 中文一区二区在线观看| 亚洲黄色av| 一区二区三区偷拍| 欧美精品亚洲一区二区在线播放| 国产视频在线观看一区二区三区| 欧美在线免费看| 欧美精品激情在线观看| 亚洲欧美另类综合偷拍| 国产午夜精品美女视频明星a级| 精品动漫3d一区二区三区免费版| 亚洲欧美日韩国产综合| 亚洲人体大胆视频| 欧美性片在线观看| 久久精品国产精品亚洲精品| 欧美日韩 国产精品| 久久成人18免费观看| 欧美成人午夜剧场免费观看| 亚洲视频免费观看| 欧美久久久久免费| 亚洲另类在线视频| 亚洲免费观看视频| 亚洲欧美一区二区在线观看| 91久久国产综合久久91精品网站| 国产女精品视频网站免费| 亚洲欧美日韩一区在线| 久久aⅴ国产欧美74aaa| 欧美天堂亚洲电影院在线播放| 欧美偷拍一区二区| 欧美日韩激情小视频| 国产精品爱久久久久久久| 亚洲毛片av在线| 在线一区二区三区四区五区| 国产欧美日韩另类一区| 夜夜嗨av色综合久久久综合网| 久久亚洲春色中文字幕| 午夜视频一区| 国产精品mm| 欧美激情一区在线观看| 久久亚洲欧美国产精品乐播| 欧美一区二区日韩一区二区| 久久精品国产第一区二区三区| 亚洲美女精品一区| 亚洲丰满少妇videoshd| 国产欧美一区二区三区沐欲| 欧美色视频日本高清在线观看| 亚洲视频图片小说| 免费观看成人鲁鲁鲁鲁鲁视频| 午夜电影亚洲| 亚洲国产一区二区在线| 久久精品视频在线看| 国产婷婷97碰碰久久人人蜜臀| 国产精品久久网站| 欧美高清在线播放| 老司机精品福利视频| 国产精品久久久久久久久婷婷| 国产精品影院在线观看| 欧美精品久久99久久在免费线| 国产精品麻豆va在线播放| 樱花yy私人影院亚洲| 亚洲第一久久影院| 国产精品日韩精品欧美精品| 欧美日韩一区在线观看视频| 亚洲免费在线观看视频| 久久久久久9999| 国产在线欧美日韩| 欧美精品一区二区三区四区| 亚洲免费av电影| 亚洲激情校园春色| 在线成人亚洲| 国产精品网站在线观看| 午夜精品亚洲一区二区三区嫩草| 亚洲欧美在线网| 欧美综合二区| 美日韩精品免费| 亚洲欧洲精品一区二区| 欧美一区激情| 亚洲午夜视频| 亚洲精品综合精品自拍| 狠狠色丁香婷婷综合久久片| 亚洲自拍另类| 国产精品国产亚洲精品看不卡15| 欧美顶级大胆免费视频| 亚洲人成毛片在线播放| 欧美色播在线播放| 亚洲第一色在线| 欧美午夜精品久久久久久人妖| 国产日韩欧美在线看| 免费日韩av电影| 久久综合久久88| 欧美在线观看网站| 欧美一区二区视频在线| 久久综合亚州| 香蕉乱码成人久久天堂爱免费| 一区二区三区在线看| 欧美精品激情在线观看| 亚洲国产精品激情在线观看| 欧美日本在线看| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美精品v日韩精品v韩国精品v| 午夜日韩在线观看| 一区二区三区欧美在线观看| 91久久极品少妇xxxxⅹ软件| 国产亚洲欧洲一区高清在线观看| 久久精品亚洲精品| 欧美视频一区二区三区| 激情一区二区三区| 久久网站热最新地址| 欧美日韩一级片在线观看| 日韩午夜在线| 久久蜜桃香蕉精品一区二区三区| 亚洲人成啪啪网站| 午夜精品久久久久久久久久久| 久久久www免费人成黑人精品| 韩国福利一区| 亚洲日本电影| 国产日本亚洲高清| 国产精品爽爽爽| 久久久久久亚洲综合影院红桃| 亚洲国产成人久久| 国产精品久久久久免费a∨大胸| 欧美日韩亚洲高清| 午夜精品久久久久久久白皮肤| 国产精品大片免费观看| 欧美激情五月| 久久综合精品一区| 欧美一区二区福利在线| 亚洲精品国产欧美| 亚洲天堂免费在线观看视频| 欧美日韩亚洲一区| 国产精品视频yy9099| 国产三级精品三级| 久久青草欧美一区二区三区| 国产精品久久77777| 另类综合日韩欧美亚洲| 亚洲精品久久| 午夜免费在线观看精品视频| 夜夜嗨av一区二区三区| 国产一区白浆| 亚洲国产欧美不卡在线观看| 欧美日韩精品久久久| 亚洲欧美日韩天堂| 亚洲国产欧美一区| 好吊色欧美一区二区三区视频| 欧美日韩18| 欧美精品自拍| 国产精品永久免费观看| 久久九九久久九九| 在线视频一区二区| 亚洲人成免费| 在线性视频日韩欧美| 国一区二区在线观看| 国产目拍亚洲精品99久久精品| 亚洲自拍高清| 亚洲国产一成人久久精品| 亚洲免费在线观看| 国产欧美一区二区三区视频| 欧美精品手机在线| 亚洲人人精品| 午夜精品久久久| 国产主播一区二区三区| 红杏aⅴ成人免费视频| 欧美日韩免费高清一区色橹橹| 国产精品久久久久久av下载红粉| 久久综合五月天婷婷伊人| 国产精品久久久久9999高清| 亚洲第一区在线| 亚洲视频一区二区| 亚洲国产一区在线观看| 欧美激情中文字幕一区二区| 日韩亚洲视频| 一区二区三区 在线观看视频| 老妇喷水一区二区三区| 欧美在线啊v一区| 久久久亚洲人| 狠狠色综合色区| 国产视频精品va久久久久久| 亚洲人成毛片在线播放女女| 国产精品欧美日韩一区| 国外成人网址| 精品成人国产在线观看男人呻吟| 欧美深夜影院| 久久久亚洲国产美女国产盗摄| 美日韩丰满少妇在线观看| 一本色道88久久加勒比精品| 一区二区日韩伦理片| 一卡二卡3卡四卡高清精品视频| 中文欧美在线视频| 99成人在线| 影音先锋亚洲视频| 久久久91精品| 欧美性猛交一区二区三区精品| 在线观看久久av| 久久久久九九九九| 国产日韩欧美中文在线播放| 国产精品午夜在线| 亚洲一区二区三区在线视频| 亚洲欧美日韩精品久久奇米色影视| 亚洲精品自在在线观看| 永久555www成人免费| 久久久久久久性| 欧美久久综合| 亚洲视频axxx| 日韩亚洲国产精品| 亚洲欧洲99久久|