程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 使用Windows虛擬設備驅動程序(VxD)之1

使用Windows虛擬設備驅動程序(VxD)之1

編輯:vc教程

一、VxD介紹

本文介紹VxD的作用。如果Windows 95提供的標准VxD對你的硬件或者軟件不能提供100%的兼容支持,你需要為你的硬件或者軟件(包括16位和32位軟件)創建VxD。如果你想讓Windows用戶使用你的硬件或者軟件的某些新特征,你也可以創建VxD。

本文介紹如何寫VxD,講述了創建VxD所需的結構、過程和調用,還給出了創建和測試VxD的步驟。VxD可以是靜態的或者動態裝載的,下面的內容主要講述靜態VxD,不過關於格式和功能的內容兩者都適用。

二、什麼是VxD

VxD是一個管理例如硬件設備或者已安裝軟件等系統資源的32位可執行程序,使得幾個應用程序可以同時使用這些資源。Windows通過使用VxD允許基於Windows的應用程序實現多任務。VxD在與Windows的連接工作中處理中斷,並在不影響其它應用程序的執行的情況下為特定的應用程序執行I/O操作。大多數VxD管理硬件設備,也有一些VxD管理或代替與之相關的軟件,例如ROM BIOS例程。VxD可以包含必須在相應設備上執行的設備相關代碼,也可以依靠其它軟件去執行這些對設備的操作。任何情況下,VxD都會為每一個應用程序保留該設備狀態的記錄,保證無論何時一個應用程序繼續執行該設備均處於正確狀態。

一些VxD僅僅管理已安裝軟件,例如MS-DOS設備驅動程序或者TSR程序,這樣的VxD通常包含仿真這些軟件或者保護這些軟件用於正在運行的應用程序的數據的代碼。VxD有時還用於提高已安裝軟件的性能,Intel兼容CPU執行32位的VxD比執行16位的MS-DOS設備驅動程序或者TSR程序有更高的效率。

三、標准VxD

Windows包括多種VxD,用於支持公共硬件設備和可安裝軟件。在某些情況下,可能需要修改VxD以提供新的特征或者支持非標准硬件。

Windows提供許多不准備修改,但能夠輔助支持其他VxD的VxD。例如:許多VxD使用V86內存管理器(V86MMGR)和虛擬可編程中斷控制器設備(VPICD)提供的功能保存V86模式內存和允許硬件中斷請求。要取得開發VxD的幫助,Windows 95設備驅動程序開發工具包(DDK)包括了大量可用設備驅動程序的源代碼。

四、創建VxD

你可以通過修改VxD例子程序或者自己手工創建來創建VxD。你可以用匯編語言來寫VxD,也可以用高級語言(例如C語言)來寫一部分VxD。

要創建一個VxD,需要以下步驟:

1、閱讀硬件手冊中關於描述這種型號硬件VxD的章節。

2、寫出所需的控制過程,VxD服務和API函數。

3、建立為VxD標識適當模塊名的模塊定義文件,並引出需要的設備描述塊。

4、匯編連接VxD。

5、用調試版Windows 95測試VxD,要獲得更多關於調試VxD的信息,請參閱相關資料(可以用Soft-ICE調試——譯者注)。

6、為VxD和相關文件建立安裝文件(INF文件),通過修改注冊信息和向Windows的SYSTEM目錄和相關目錄拷貝文件來安裝VxD。

7、建立最終發行軟件包。

五、你需要怎樣開始

本文假定你是一位有經驗的匯編語言程序員,而且熟悉Intel兼容處理器的指令集和系統結構。在某些特殊情況下,你還應該懂得下列內容:

保護模式和虛擬8086(即V86——譯者注)模式。

平坦內存模式

中斷和異常處理

保護和特權級

段和頁式內存管理以及錯誤處理

輸入和輸出保護以及錯誤處理

本文也假定你已經熟練了解專門硬件的特征和相應的ROM BIOS例程以及其他可安裝軟件。

六、寫一個VxD

許多情況下,寫一個VxD用來代替一個由Windows 95提供的標准VxD。然而,大多數情況下,寫一個VxD是用來支持新硬件設備或者軟件的,在這

種情況下,通常手工創建一個VxD比修改已經存在的VxD要容易,原因是大多數VxD都是設備相關的。然而,已存在VxD的源代碼需要盡可能地仔

細分析,原因是它們可能包含通用的格式和結構,以及說明怎樣使用VMM和VxD服務去實現有用的功能。

寫一個VxD需要下列步驟:

1、建立包含VxD各個段,VxD聲明,設備控制過程,處理系統控制消息過程的基本部分和API過程的基本部分的VxD框架。

2、加入實模式初始化過程(可選)。

3、完成處理初始化消息的過程。這些過程應該能夠初始化控制塊,分配全局內存以及安裝中斷、I/O捕獲和頁錯誤回調過程。

4、完成處理不同中斷和錯誤的回調過程。

5、為服務加入服務表定義和聲明(可選)。

6、完成API過程(可選)

7、完成處理系統控制消息的過程以建立和刪除虛擬機。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved