国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

虛擬設備驅動程序的設計與完成

虛擬設備驅動程序的設計與完成

更新時間:2022-05-13 文章作者:未知 信息來源:網絡 閱讀次數:

陳國友


  由于Windows對系統底層操作采取了屏蔽的策略,因而對用戶而言,系統變得更為安全,但這卻給眾多的硬件或者系統軟件開發人員帶來了不小的困難,因為只要應用中涉及到底層的操作,開發人員就不得不深入到Windows的內核去編寫屬于系統級的虛擬設備驅動程序。Win 98與Win 95設備驅動程序的機理不盡相同,Win 98不僅支持與Windows NT 5.0兼容的WDM(Win32 Driver Mode)模式驅動程序,而且還支持與Win 95兼容的虛擬設備驅動程序VxD(Virtual Device Driver)。下面介紹了基于Windows 9x平臺的虛擬環境、虛擬設備驅動程序VxD的基本原理和設計方法,并結合開發工具VToolsD給出了一個為可視電話音頻卡配套的虛擬設備驅動程序VxD的設計實例。


  1.Windows 9x的虛擬環境


  Windows 9x作為一個完整的32位多任務操作系統,它不像Window 3.x那樣依賴于MS-DOS,但為了保證軟件的兼容性,Windows 9x除了支持Win16應用程序和Win32應用程序之外,還得支持MS-DOS應用程序的運行。Windows 9x是通過虛擬機VM(Virtual Machine)環境來確保其兼容和多任務特性的。


  所謂Windows虛擬機(通常簡稱為Windows VM)就是指執行應用程序的虛擬環境,它包括MS-DOS VM和System VM兩種虛擬機環境。在每一個MS-DOS VM中都只運行一個MS-DOS進程,而System VM能為所有的Windows應用程序和動態鏈接庫DLL(Dynamic Link Libraries)提供運行環境。每個虛擬機都有獨立的地址空間、寄存器狀態、堆棧、局部描述符表、中斷表狀態和執行優先權。雖然Win16、Win32應用程序都運行在System VM環境下,但Win16應用程序共享同一地址空間,而Win32應用程序卻有自己獨立的地址空間。


  在編寫應用程序時,編程人員經常忽略虛擬環境和實環境之間的差異,一般認為虛擬環境也就是實環境。但是,在編寫虛擬設備驅動程序VxD時卻不能這樣做,因為VxD的工作是向應用程序代碼提供一個與硬件接口的環境,為每一個客戶虛擬機管理虛設備的狀態,透明地仲裁多個應用程序,同時對底層硬件進行訪問。這就是所謂虛擬化的概念。


  VxD在虛擬機管理器VMM(Virtual Machine Manager)的監控下運行,而VMM實際上是一個特殊的VxD。VMM執行與系統資源有關的工作,提供虛擬機環境(能產生、調度、卸載VM)、負責調度多線程占先時間片及管理虛擬內存等工作。VxD與VMM運行在其他任何虛擬機之外,VxD事實上就是實現虛擬機的軟件的一部分。


  與大多數操作系統一樣,Windows也是采用層次式體系結構。VMM和VxDs構成了Win 95的ring0級的系統核心(應用程序運行在ring3級,ring1、ring2級未被使用),具有系統的最高優先權。Windows還提供一些以"drv"為后綴名的驅動程序,主要是指串行口的通信程序和并行口的打印機程序。這些程序與VxD不同,它們是運行在ring3級上的。圖1可以使你更好地理解Windows的虛擬環境。


  圖


  2.深入理解VMM和VxD


  如前所述,VxD是Virtual Device Driver的縮寫,但有人將它理解為虛擬任何驅動程序。實際上,VxD并非僅指那些虛擬化的某一具體硬件的設備驅動程序。比如某些VxD能夠虛擬化設備,而某些VxD作為設備驅動程序卻并不虛擬化設備,還有些VxD與設備并沒有什么關系,它僅向其他的VxD或是應用程序提供服務。


  VxD可以隨VMM一起靜態加載,也可以根據需要動態加載或卸載。正是由于VxD與VMM之間的緊密協作,才使得VxD具有了應用程序所不具備的能力,諸如可以不受限制地訪問硬件設備、任意查看操作系統數據結構(如描述符表、頁表等)、訪問任何內存區域、捕獲軟件中斷、捕獲I/O端口操作和內存訪問等,甚至還可以截取硬件中斷。


  盡管VxD使用32位平面存儲模式(flat memory model),但它的代碼和數據仍使用分段管理,段有六種類型,即實模式初始化、保護模式初始化、可分頁、不可分頁、靜態和只調試(debug only),每種類型又有代碼段和數據段之分,所以VxD共有12個段。實模式代碼段和數據段為16位(分段模式),其他段則是32位(平面模式)。“實模式初始化”段包含了在Windows初始化過程的最初階段VMM變為保護模式之前要執行的代碼。靜態加載的VxD此時可以查看Windows啟動前的實模式環境,決定是否繼續加載,并通知VMM。加載完畢后,VMM進入保護模式并執行保護模式初始化代碼,同樣將執行結果再通知VMM。初始化完成后,“實模式初始化”段和“保護模式初始化”段即被遺棄。VxD的大部分代碼都在其他的某一段中,“可分頁”段允許虛擬存儲管理器(Virtual Memory Manager)進行分頁管理,大多數的VxD代碼都應當在“可分頁”段。“不可分頁”段的內容主要包括:VxD的主入口點、硬件中斷處理函數、所訪問的數據以及能被另一個VxD中斷處理函數調用的異步服務。“靜態”段僅用于可以動態加載的VxD,當VxD卸載后,靜態代碼段和數據段都保留在內存中。“只調試”段只是VMM在Soft-ICE for Win 95等調試環境下才將其載入。


  VMM是通過VxD的設備描述符塊DDB(Device Descriptor Block)來識別的。DDB向VMM提供了VxD的主入口點,還向應用程序和其他的VxD提供了入口點。VMM利用這個主入口點將VM及Windows自身的狀態通知給VxD,然后VxD通過相應的工作來響應這些事件。由于VxD不僅僅服務于一個物理設備(比如多個串口)或僅與一個VM發生聯系,所以VxD需要產生自己支持的數據結構(Supporting Data Structures)來保存每一個設備、每一個VM的配置和狀態信息。VxD用一個或多個設備上下文結構來保存設備信息,如I/O端口基地址、中斷向量等,VxD將自己的每個VM的狀態信息保存在VMM的VM控制塊中。


  VMM提供的服務包括:事件服務、內存管理服務、兼容執行和保護模式執行的服務、登錄表服務、調度程序服務、同步服務、調試服務、I/O捕獲服務、處理錯誤和中斷服務、VM中斷和回調服務、配置管理程序服務以及其他雜項服務。


  以上內容僅涉及到VxD設計的一小部分,作為VxD的開發人員必須掌握更多的知識。首先是操作系統的知識,如地址空間、執行上下文、資源加鎖、進程間通信和異步事件處理等方面的知識;其次,對Intel處理器應有較深入的理解,包括寄存器、機器指令集、保護機制、分頁機制,以及虛擬8086模式;最后,還必須熟悉VMM提供的各類服務和接口,熟悉Windows其他的系統VxD。


  3.開發工具VToolsD簡介


  VToolsD是專門用于開發VxD程序的一種工具軟件,它包括VxD框架代碼生成器QuickVxD、C運行庫、VMM/VxD服務庫、VxD的C++類庫、VxDLoad和VxDView等實用工具以及大量的C、C++例程。由VC++、BC++的32位編譯器編譯生成的VxD程序可以脫離VToolsD環境運行。


  利用QuickVxD可以方便、快捷地生成VxD的框架,即生成后綴名為h、cpp和mak的三個文件。源文件包含了運行VxD的基本組件,其中包含控制消息處理、API入口點、以及VxD服務等函數框架,并且還定義了標志,設置了編譯參數,聲明了類,然后在C++環境下,向生成的各個處理函數體內添加自己的代碼,最后使用編譯器NMAKE生成標準的VxD程序。


  由于VxD運行在ring0級,所以調試程序相當困難。我使用的調試工具是Soft-ICE for Win 95。


  目前VToolsD的最新版本為3.0,它支持設備訪問體系結構DAA(Device Access Architecture),所編寫的程序代碼將可以在所有Windows平臺(包括Win 95、Win 98以及Windows NT)上共享。當然也可以使用Microsoft公司的DDK(Device Developer Kit)來開發VxD,但DDK不能像VToolsD那樣通過屏蔽系統及VxD的底層技術細節提供豐富的C運行庫和C++類庫,而是讓開發人員充分享用面向對象編程方法的方便與快捷,因此僅就該點而言,使用DDK是不方便的。


  4.VxD程序設計實例


  我在開發可視電話音頻卡的設計過程中,用VToolsD 2.03、VC++ 5.0為自制的PC/XT總線擴展卡開發了虛擬設備驅動程序Audcard.vxd。該卡每20ms申請一次中斷,中斷由應用程序動態載入系統的Audcard.vxd響應并加以處理。中斷服務程序ISR(Interrupt Service Routine)結束后,調用函數Shell_PostMessage( )向應用程序窗口發送自定義消息。應用程序接受消息后,再通過函數DeviceIoControl( )與VxD的接口函數OnW32DeviceIoControl( )互傳緩沖區數據。程序結束即可動態卸載VxD。下圖表示在Win 95下VxD對硬件中斷的處理過程。


  圖Win95下硬件中斷的處理過程


  當中斷發生時,處理器轉換為ring0級保護模式。Windows系統并不像DOS那樣通過中斷描述符表IDT(Interrupt Descriptor Table)直接指向中斷處理過程,而是由IDT入口指向VMM中的程序。該程序將判斷是否為中斷調用,如果是,則把中斷控制權交給虛擬可編程中斷控制器VPICD(Virtual Programmable Interrupt Controller Device),VPICD實際上是一個重要的VxD。VPICD再將其交給另一個注冊了該中斷的VxD(如Audcard.vxd)來處理。VxD程序是通過調用VPICD服務VPICD_Virtualize_IRQ來注冊中斷的。


  虛擬設備驅動程序Audcard.vxd的部分源代碼Audcard.h和Audcard.cpp在網上,網址為:www.pccomputing.com.cn。此應用程序使用了下列函數:CreateFile()動態加載VxD、CloseHandle()并動態卸載VxD、PreTranslateMessage()截獲消息、DeviceIoControl()與VxD互傳緩沖區數據。虛擬設備驅動程序Audcard.vxd經調試后工作正常,未發生過任何丟失數據或死機的現象。


  下面是虛擬設備驅動程序Audcard.vxd的部分源代碼Audcard.h和Audcard.cpp,限于篇幅,由QuickVxD自動生成的Audcard.mak未列出。


  ①Audcard.h


  //AUDCARD.h - include file for VxD AUDCARD


  #include


  #define DEVICE_CLASS AudcardDevice


  #define AUDCARD_DeviceID UNDEFINED_DEVICE_ID


  #define AUDCARD_Init_Order UNDEFINED_INIT_ORDER#define AUDCARD_Major


  #define AUDCARD_Minor 0


  #define MY_IRQ 5 //定義5號中斷


  class MyHwInt:public VHardwareInt


  {


  public:


   MyHwInt():VHardwareInt(MY_IRQ,0,0,0){}


   virtual VOID OnHardwareInt(VMHANDLE);


  };


  class AudcardDevice : public VDevice


  {


  public:


   virtual BOOL OnSysDynamicDeviceInit();


   virtual BOOL OnSysDynamicDeviceExit();


   virtual DWORD OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams);


   MyHwInt* pMyIRQ;


  };


  class AudcardVM : public VVirtualMachine


  {


  public:


   AudcardVM(VMHANDLE hVM);


  };


  class AudcardThread : public VThread


  {


   public:


   AudcardThread(THREADHANDLE hThread);


  };


  


  ②Audcard.cpp


  //AUDCARD.cpp - main module for VxD AUDCARD


  #define DEVICE_MAIN


  #include "audcard.h"


  Declare_Virtual_Device(AUDCARD)


  #define WM_USER_POSTVXD 0x1000  //自定義消息


  #undef DEVICE_MAIN


  AudcardVM::AudcardVM(VMHANDLE hVM) : VVirtualMachine(hVM) {}


  AudcardThread::AudcardThread(THREADHANDLE hThread) : VThread(hThread) {}


  BOOL AudcardDevice::OnSysDynamicDeviceInit() //動態加載時初始化


  {


   ......//硬件初始化


   pMyIRQ=new MyHwInt();


  if(pMyIRQ&&pMyIRQ->hook()) //掛接中斷


  {


   pMyIRQ->physicalUnmask(); //允許中斷


   return TRUE;


   }


   else return FALSE;


  }


  BOOL AudcardDevice::OnSysDynamicDeviceExit()


  //動態卸載過程


  {


   delete pMyIRQ;


   return TRUE;


  }


  DWORD AudcardDevice::OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams)


  //與Win32應用程序的接口函數


  {


  ......


  }


  VOID MyHwInt::OnHardwareInt(VMHANDLE hVM)


  {


   ...... // 中斷處理


   SHELL_PostMessage(AppWnd,WM_USER_POSTVXD ,0,0,0,NULL);


   //向應用程序窗口發送消息


   sendPhysicalEOI(); //通知VPICD中斷結束


  }


  (作者地址:南京通信工程學院98信箱 210016 收稿日期:1998.12.03)

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        亚洲国产三级在线| 91麻豆精品秘密| 成人一道本在线| 久久美女高清视频| 国产精品综合一区二区三区| 精品少妇一区二区三区视频免付费 | 国产在线视频一区二区| 欧美精品一区二区三区蜜桃视频 | 美女高潮久久久| 欧美经典一区二区| 国产一区二区三区四| 中文字幕的久久| 在线观看欧美日本| 美国毛片一区二区三区| 亚洲国产精品二十页| 色香色香欲天天天影视综合网| 亚洲高清视频在线| 欧美国产精品一区二区| 欧美三级中文字幕在线观看| 青娱乐精品视频| 国产精品成人网| 9191成人精品久久| fc2成人免费人成在线观看播放| 亚洲精品免费一二三区| 26uuuu精品一区二区| 91麻豆国产在线观看| 国产呦萝稀缺另类资源| 亚洲一区在线观看免费| 久久久久久黄色| 欧美日韩不卡一区| kk眼镜猥琐国模调教系列一区二区| 日产精品久久久久久久性色| 中文字幕一区二区在线播放| 欧美一区二区美女| 色哟哟精品一区| 国产不卡免费视频| 91传媒视频在线播放| 国产蜜臀97一区二区三区| 17c精品麻豆一区二区免费| 欧美高清一级片在线| 久久国产乱子精品免费女| 久久久久高清精品| 欧美肥大bbwbbw高潮| 国产在线国偷精品产拍免费yy| 亚洲国产精品久久久久婷婷884| 色999日韩国产欧美一区二区| 欧美xxxxxxxx| 91高清视频在线| 久久色中文字幕| 欧美精品一二三四| 91国产成人在线| 成人午夜电影小说| 国产麻豆精品视频| 久久精品999| 极品少妇xxxx精品少妇| 美女视频黄频大全不卡视频在线播放| 亚洲区小说区图片区qvod| 国产精品美女www爽爽爽| 久久久av毛片精品| 国产清纯白嫩初高生在线观看91| 日韩欧美一区在线观看| 欧美成人三级在线| 欧美成人精品福利| 久久久久88色偷偷免费| 国产欧美视频在线观看| 日本一区二区免费在线观看视频| 欧美国产欧美亚州国产日韩mv天天看完整| 国产婷婷一区二区| 亚洲男同性恋视频| 亚洲超碰精品一区二区| 免费观看日韩电影| 国产精品综合在线视频| 91网页版在线| 在线播放欧美女士性生活| 日韩一区二区三区四区| 久久久久久久久久久久久女国产乱| 国产亚洲精品aa午夜观看| 中文字幕一区二区三区蜜月| 综合久久给合久久狠狠狠97色| 一区二区三区久久| 免费高清不卡av| 国产盗摄一区二区| 欧美在线一二三四区| 欧美sm极限捆绑bd| 亚洲婷婷在线视频| 美女诱惑一区二区| 99精品一区二区| 日韩三级视频在线看| 亚洲国产精品高清| 亚洲国产裸拍裸体视频在线观看乱了| 男男视频亚洲欧美| eeuss国产一区二区三区| 欧美男同性恋视频网站| 国产精品入口麻豆原神| 亚洲超丰满肉感bbw| 国产91露脸合集magnet| 欧美男男青年gay1069videost| 久久久精品影视| 午夜一区二区三区视频| 粉嫩av亚洲一区二区图片| 欧美三级电影精品| 国产精品午夜久久| 免费高清在线视频一区·| 色综合视频一区二区三区高清| 欧美成人一区二区三区片免费 | 久久毛片高清国产| 亚洲综合999| 成人高清伦理免费影院在线观看| 91精品婷婷国产综合久久性色| 国产精品久久久久影院亚瑟| 美女在线观看视频一区二区| 欧美午夜精品久久久| 国产精品久久久爽爽爽麻豆色哟哟| 免费观看在线综合色| 欧美日韩电影在线| 亚洲美女少妇撒尿| 成年人午夜久久久| 国产欧美日韩亚州综合| 九九九久久久精品| 日韩午夜中文字幕| 午夜欧美一区二区三区在线播放| 91在线无精精品入口| 国产欧美日韩在线看| 国产精品2024| 久久精品视频免费观看| 另类小说综合欧美亚洲| 这里只有精品免费| 人禽交欧美网站| 欧美日本在线一区| 性感美女极品91精品| 欧美三级电影在线观看| 一区二区三区中文字幕精品精品 | 久久av老司机精品网站导航| 欧美高清你懂得| 亚洲成人午夜影院| 欧美性生活久久| 亚洲18色成人| 欧美一级精品大片| 精品综合免费视频观看| 日韩精品一区二区三区在线播放| 久久成人羞羞网站| 久久嫩草精品久久久精品| 国产成人激情av| 亚洲日本青草视频在线怡红院| 99re热视频这里只精品| 亚洲一区二区三区四区在线免费观看 | 五月婷婷另类国产| 9191成人精品久久| 美国十次综合导航| 国产日韩欧美激情| 成人av一区二区三区| 亚洲免费在线看| 制服丝袜日韩国产| 国产一区二区三区在线看麻豆| 国产目拍亚洲精品99久久精品| aaa亚洲精品| 亚洲一二三级电影| 日韩欧美亚洲国产另类| 国产乱子轮精品视频| 国产精品麻豆99久久久久久| 91国内精品野花午夜精品| 免费久久精品视频| 亚洲欧洲av一区二区三区久久| 欧美在线三级电影| 久久99精品久久久| 国产精品久久久久精k8| 在线看国产一区| 国产精品综合av一区二区国产馆| 国产精品美女久久久久久久网站| 欧美中文字幕久久| 国产精品一级二级三级| 亚洲日本丝袜连裤袜办公室| 欧美不卡在线视频| 色综合天天综合网天天狠天天| 午夜不卡av免费| 国产精品美女久久久久久久网站| 337p亚洲精品色噜噜噜| 国产成人av自拍| 亚洲成人www| 国产精品免费视频一区| 欧美日韩国产小视频在线观看| 国产91精品久久久久久久网曝门| 艳妇臀荡乳欲伦亚洲一区| 精品久久久网站| 欧美人与禽zozo性伦| 色综合中文字幕| 国产成人aaa| 极品美女销魂一区二区三区| 亚洲永久免费视频| 国产精品视频你懂的| xfplay精品久久| 91精品国产综合久久小美女| 97精品国产97久久久久久久久久久久 | 成人黄色av电影| 久久精品国产久精国产| 石原莉奈在线亚洲二区| 亚洲三级在线免费观看| 中文字幕在线一区二区三区| 精品国产乱码久久久久久久久| 91精品免费在线观看|