?? 驅動程序開發工具簡介.txt
字號:
驅動程序開發工具簡介
作者: znsoft
工欲善其事必先利其器。
古人說得好。我們不管做什么工作,都需要稱心如意的工具。打仗要用刀、槍、炮什么的,砍柴要用山刀(一種山區用來砍柴的刀具),吃飯要用筷子,那我們開發驅動程序要用什么工具呢?很自然地,我們會想到編譯器。是呀,沒有編譯器空有源碼也沒用。但最主要的還不是編譯器,而是各種輔助開發工具。這些工具主要用于簡化相關的開發,以便快速或方便地生成我們所需要的驅動程序。
限于筆者所知有限,只能介紹以下幾種:
我們把它們分為以下類來介紹:
源碼輔助生成工具:
VXDWriter
Vtoolsd
DriverStudio
WinDriver
調試工具
Soft-ice
Trw2000
WDeb386
一、源碼輔助生成工具
(1) VXDWriter
VXDWriter 由印度TECHSOFT PVT公司開發,目前最新版本為2.0,一般用戶可以在http://www.techsoftpl.com下載演示版,在驅動開發網可以下載1.01“特別”試用版(只能用于學習與研究目的,切勿用于商業開發)。
以下為主界面圖:
給人的第一感覺很象….很象VTOOLSD吧。
VXDWriter配套的工具 DbgTerm用來顯示VXD驅動輸出的高度輸出信息。它的地位就相當于Vtoolsd中的Debug Monitor。
VXDWritre是一個基于c/c++語言的Windows98/95 VXD驅動程序開發工具。你可以使用本工具用完全的c/c++語言開發VXD驅動程序而不需要嵌入一丁點的匯編語言程序。當優化選項打開時,生成的VXD驅動程序的代碼效率和二進制代碼大小不比用純匯編語言生成的遜色。使用這個工具你能大大減少開發和維護vxd驅動程序的開消。
VXDWriter較之使用98/95DDK的優勢在于以下幾點:
1. 只需要輸入很少的信息就可以生成VXD驅動程序的框架。
2. 運行庫使你很容易地處理回調函數、中斷仿真、內存管理、串和內存操作、調用32位用戶態動態庫(32-bit DLLs in application-time)、浮點操作等等。
3. 包含超過620種附加的VXDs服務包裝函數,因此你可以在你用c/c++寫的VXD驅動程序中調用任何的VXD服務。
4. 高度優化的VXD基礎類庫,允許你在c++中充分運用面象對象技術而不損失任何性能。
5. 允許你在vc++的集成開發環境中開發VXD驅動程序 ,你可以充分享受它帶給你的便利,如文件導航,語法高亮,F1快速喚出幫助系統等等。
6. 集成98ddk的幫助文件,你可以在VC++6.0的集成環境中用F1鍵調用這個組合幫助系統。
7. 提供了各種各樣詳盡的例子。
8. 包含調試信息監視工具,幫助你調試VXD驅動程序。
9. 隨本工具提供運行庫的源代碼。
10. 90天免費Email技術支持。
當然,最后兩項是在你注冊本軟件后才能得到的。
軟件系統需求:
要用VXDWriter開發VXD驅動程序,你需要運行Windows95(任何版本)或 Windows98(第二版)操作系統之中的任何一個,并需要以下工具:
MS Visual C++ compiler 5.0/6.0.
Windows 95/98 DDK.
至少5M的剩余磁盤空間以安裝VXDWriter2.0。
如果你使用的是Windows95操作系統,你還需要platform SDK(平臺SDK)中的16位資源編譯器。但本系統推薦使用Windows98操作系統和VC++6.0編譯器,Windows98DDK作為后續版本已經包含了更新后的頭文件和幫助系統。VXDWriter的幫助系統中已經集成了Windows98 DDK的幫助文件。
調試器可以用windows 98DDK中包含的WDEB386,或商業版本的Soft-Ice for Win32或國內的Trw2000。
具體使用方法請參見VXDWriter自帶的幫助文檔。
二、VTOOLSD
VTOOLSD是由CompuWare公司出品的一款VXD輔助開發工具。它包含一套功能強大的驅動開發基礎類庫,提供了對VXD編程的全線C++類庫支持,將各種功能抽象成相應的類,讓你充分享受面向對象帶來的各種好處。
以下我們以Vtoolsd3.0版本來介紹它。Vtoolsd3.0版工具包括一套驅動開發C++類庫、QuickVXD快速向導、Debug Monitor、VxdView和相應的聯機幫助系統。
QuickVXD
你只需要在其中填寫很少的信息就可以生成VXD驅動程序框架。看看它是不是和VXDWriter相似呢?實際上是VXDWriter模仿它的界面。它的具體使用我們已經在以前的文章《VXD開發技術》中作了介紹。
VXDView
VXDView用來查看系統中已經加載的VXD驅動的相關信息。左邊的窗口是已經加載的VXD驅動程序。看到的名字就是我們在VXD開發階段填寫的設備名。參看上面,也就是我們寫入 “Device Name”框中的 文字,如果上面的VXD驅動程序開發完畢加載后,將在VXDView的左邊窗口中顯示”SAMPLE01”字樣。驅動程序的設備名只能是字母開頭,并且只能是最多八個字符,命名規則和c語言相似。
使用上面的工具可以看到系統中加載的所有VXD驅動。
圖中所顯示的是叫“VMM”的虛擬設備驅動程序的信息。它的全稱叫“虛擬機管理器”。它本身也是一個VXD驅動程序。
VMM是所有VXD的調度中心,它本身與設備無關,負責建立一個虛擬化物理設備的框架,并創建和管理各個VM(虛擬機),VMM還是VM與VxDs之間的通信聯絡者。VMM提供很多服務例程可供VxDs使用,包括有調度服務、時間服務、頁面管理服務、VM管理服務等,功能非常復雜。
DebugMonitor用于顯示驅動程序中的輸出信息,如果看過本專欄上一篇文章的讀者一定記得最后寫的那個簡單的VXD驅動程序,它在Debug Monitor中輸出一串字符。這些字符只能在Debug Monitor或Soft-ICE中才能看得到。當驅動程序開發完畢時要去掉這些調試信息的。
VTOOLSD運行庫
Vtoolsd C++類庫提供在C++中開發VXD的面象對象的框架支持。這套類庫提供基于類的對虛擬機管理器和VXD服務的訪問,通過設計的一套附加類庫提供的新特性來簡化普通VXD驅動程序的開發任務。
框架類
VDevice
Vdevice類為虛擬機框架類,是所有虛擬機的基礎類。所有的虛擬機類必須從本類派生出來。它處理一般以虛擬機消息,如虛擬機加載,虛擬機卸載等等。
VThread
本類處理所有與線程有關的控制消息。若所創建的VXD驅動程序對特定線程的創建、終止等情況感興趣,就必須創建VThread的派生類并重載其相關成員函數。
VVirtualMachine
有一些控制消息是針對特定的虛擬機的,如VM_INIT、VM_SUSPEND等。這些控制消息的處理需要在類VVirtualMachine的派生類的成員函數中進行。
事件處理型類
Direct Memory Access (DMA)
提供對DMA的管理功能。DMA是直接內存存取。即不通過CPU進行數據傳輸。在Windows平臺上,VM之間必須共享DMA,DMA設備驅動程序(VDMAD)提供一個虛擬的DMA控制器使得共享DMA成為可能。
Event Processing (一組類的結合)
VXD驅動大部分工作是處理各種類型的事件。根據具體服務要求,在VXD中捕捉中斷、捕捉I/O端口或者捕捉頁面錯誤。VMM提供的服務很大部分是在這些事件發生時及時地通知相應的VXD作出反應。
包含對各種事件的處理的類:
VDeviceAPI:許多VXD采用V86API調用入口和PM API調用入口給ring3層的程序提供服務。有些時候需要攔截ring3層程序對這些入口函數的調用,從而達到監視調用入口、提高程序某些性能的目的。
另外還有以下類:
VEvent 提供對異步事件的處理。
VGlobalEvent 提供對全局異步事件的處理。
VVMEvent 對特定虛擬機的事件的處理。
VAppyTimeEvent 提供VXD在異步事件中對ring3層函數的調用管理。
本類還有其它一些不常用的類。
Faults (一組類的結合)
VInvalidPageFault
使頁失效不被系統處理。
VNMIEvent
不可屏蔽中斷事件處理。
VProtModeFault
保護模式失效發生事件處理。
VVMMFault
VXD級(ring 0層)失效發生事件處理。
VV86ModeFault
V86模式失效發生處理。
VV86Pages
V86模式指定地址空間頁失效事件處理。
Interrupts (一組類的結合)
VHardwareInt 類
提供對某個IREQ端口的虛擬化。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -