1. 程式人生 > >Windows 驅動模型的發展歷史

Windows 驅動模型的發展歷史

直接從win95/98說起,因為之前的系統基本上沒有保護模式的概念,程式設計師可以直接修改任意記憶體的資料。在95/98中採用的核心開發模型是VxD(虛擬裝置驅動),在dos時期,程式認為它們擁有系統的一切,嚴格來說95/98是建立在dos的基礎上的作業系統,當dos程式移植到 windows中,windows必須提供一個虛擬的裝置供程式訪問,也就是真實機器的替身,例如,當一個dos程式和鍵盤通訊的時候,事實上它是和VkD(虛擬鍵盤裝置)通訊。一個VxD程式通常控制真正的硬體裝置並對該裝置在各個虛擬機器之間的共享進行管理。 儘管如此,並不是說每個VxD程式必須和一個硬體裝置相連。雖然VxD程式是用來虛擬硬體裝置的,但是我們也可以把VxD程式看作是在第0級別的dll。例如,如果你需要做一些只有在第0級別才能做的工作,你就可以編一個VxD程式來為你完成這個工作。這樣,由於此VxD程式並沒有虛擬任何裝置,你就可以把它僅僅看作是你的程式的擴充套件。 VxD程式在NT的架構中已經徹底被放棄了,因為VxD的權利實在太大,它們可以做任何的事情,所以才有當初的CIH病毒。系統對惡意的VxD並沒有任何保護。

到了NT核心的時代,作為一個微核心作業系統,NT是建立在Mach和Vax思想上的一種客戶/伺服器模型作業系統,由一個特權執行體以及一系列被稱為保護子系統的非特權伺服器組成。整個作業系統被分為使用者態模式和核心態模式。所謂特權,是指處理器的操作方式,大多數的處理器都有一種甚至若干種特權方式。在特權方式方式下,所有機器指令都可執行並且系統記憶體可存取。在非特權方式方式下,某些機器指令不能執行並且系統記憶體不可存取。在Windows NT下,核心態就是指處於特權處理器方式下,而使用者態總處於非特權處理器方式。

核心態模式又被稱為NT執行體,包括了系統服務和硬體描述層(HAL),它們運行於CPU的特權層Ring0(在驅動程式內部,在不同部分還分為不同許可權層)。系統服務包含了一個作業系統的所有應有服務,檔案系統,程序控制,記憶體管理,裝置管理等等。在NT核心態包含了兩種基本型別的驅動:使用者模式驅動和核心態驅動。使用者態驅動包含了Win32多媒體驅動,支援MS-DOS應用程式的VDD(虛擬裝置驅動)和其它保護子系統的驅動.使用者態驅動是一種特殊的子系統,詳細的可以看DDK中的多媒體驅動和虛擬DOS驅動文件。核心態驅動有針對邏輯的,虛擬的以及物理的裝置.我們稱之為NT驅動。有三種類型的NT驅動,每種型別都有略微不同的結構和完全不同的功能。

1. 裝置驅動,例如直接控制物理裝置的鍵盤和磁碟驅動.也稱其為低階的驅動,因為它們都特別地處於分層的NT驅動鏈的最低層。

2. 中間介質驅動,例如虛擬磁碟,映象,或特殊型別的裝置驅動,這些都依靠下層的裝置驅動提供支援。

3. 檔案系統驅動,例如系統支援的FAT,HPFS,NTFS,CDFS,MSFS,NPFS或RDR驅動,它們一樣需要低層驅動的支援。

其實後來的WDM和現在的WDK基本都是基於這個架構,WDM是加入了即插即用支援的核心開發框架,而WDK是為了提高開發效率在WDM上包裝了一層Wdf的函式介面。

轉載自   :   http://blog.chinaunix.net/u/4329/showart_2132654.html

1.最先開始使用的是VXD(早廢棄了)

2.自Windows 2000開始,開發驅動程式必以WDM為基礎的,意為Windows Driver Model,是一個標準的驅動模型,意思是說你可以在這個模型上有所改動,WDM是Vista以前平臺的驅動模型。(vista支援大部分的WDM驅動)

3.WDF是Vista及其以後OS的驅動模型,意為Windows Driver Foudation,此模型比WDM更先進、合理(微軟是這樣說的),將WDM中關於電源、PnP等一些複雜的細節由微軟實現,所以在此模型上開發驅動會 比以前要簡單(個人覺得是要簡單一些了,不過隱藏了更多細節)

------------------------------------------------------------------------------------

WDF 與 WDK 名詞解釋

WDF驅動模型

如所周知,自Windows 2000開始,開發驅動程式必以WDM為基礎的,但其開發難度之大,根本不能奢望像使用者模式應用程式開發那樣容易。為改善這種局面,微軟推出了新的驅動程式開發環境。要預先指出的是,這不是另起爐灶改弦更張,而是以WDM為基礎進行了建模和封裝,顯著特點是降低了開發難度。因為:

1、 將原來普通程式設計中基於物件的技術應用到了驅動開發中。WDM中雖也有物件模型,但與真正的基於物件技術根本就不是一回事。為了實現基於物件的技術,微軟精心設計了物件模型並進行了封裝。屬性、方法、事件等等“一個都不能少”。

2、 無論核心模式的驅動程式或者使用者模式的驅動程式,都採用同一套物件模型構建,採用同一個基礎承載。這個基礎就是WDF。WDF雖然已經是經過封裝和定義的 物件模型,但對核心模式和使用者模式物件來說,WDF又是兩者的父物件。換言之兩者都是繼承了WDF才得到的,或者都是從WDF派生而來的。相對於核心模 式,派生出的物件稱為“KMD框架”即KMDF;相對於使用者模式,派生出的模型稱為“UMD框架”即UMDF。無論何種模式的框架,其內部封裝的方法、執 行的行為其實還是用WDM完成的。

3、更重要的,也是微軟反覆炫耀的是封裝了驅動程式中的某些共同行為:例如即插即用和電源管理就屬於這種共同行為。因為大多數驅動程式中都需要處理即插即用和電源管理問題,據說這大概要上千行的程式碼,況且,沒有相當水平還不一定能處理好。為了一勞永逸,WDF乾脆將即插即用和電源管理封裝了進了物件之內,一舉成了物件的預設(預設)行為。

4、改變了作業系統核心與驅動程式之間的關係,WDM驅動程式中,一方面要處理硬體,另一方面要處理驅動程式與作業系統核心的互動。現在WDF則將驅動程式與作業系統核心之間進行了分離,驅動程式與作業系統互動工作交給框架內封裝的方法(函式)完成,這樣驅動開發者只需專注處理硬體的行為即可。這不僅避免了顧此失彼兩面不周的弊端,也由於雙方的分離,對作業系統內的某些改動,硬體製造商配套驅動程式的開發都有莫大的好處。

5、 兩種模式的驅動程式(KMDF、UMDF)都使用同一環境進行構建,這一環境稱為WDK。

   即KMDF,UMDF的開發環境為WDK。以前WDM開發的環境為DDK

Windows Device Kit (WDK): 把測試套件(test suites)整合進來,DDK 就成了WDK。WDK是針對微軟作業系統系列的驅動器整合開發系統。它組合了Windows DDK和Hardware Compatibility Test (HCT) kits(硬體相容性測試工具),同時提供了微軟內部用來測試Windows作業系統穩定性和可靠性的測試套件。

6、 雖然經過封裝並引入基於物件的技術,所開發的驅動程式在執行效率上並不比原來遜色。

××××××××××××××××××××××××××××××××××××××××××××××

××××××××××××××××××××××××××××××××××××××××××××××

總結:

總的來說驅動的幾個過程是開始的VXD(虛擬X裝置)------>NT式驅動―>WDM->WDF

從VXD到NT式驅動經歷了革命性的變化,完全是兩種概念了,所以vxd已經完全淘汰,但是虛擬裝置思想還是在的,第一篇博文說了“其實後來的WDM和現在的WDK基本都是基於NT這個架構,WDM是加入了即插即用支援的核心開發框架,而WDK是為了提高開發效率在WDM上包裝了一層Wdf的函式介面。”

然後就是DDK和WDK只是這兩個對應的WDM與WDF驅動形式的一個開發環境。