隨學隨記,暫時未經編程驗證 Written by HOOK_TTG(Jamie Jiang)
關鍵詞:
NT-based 基於NT技術
User-Mode Drivers 用戶模式驅動程序
Kernel-Mode Drivers 內核模式驅動程序
WDM(Windows Driver Mode) Windows驅動模型
1、Windows組件概述
下圖顯示了基於NT技術操作系統主要的內部組件
據上圖可知,基於NT技術操作系統包含了 User-mode和Kernel-mode組件。內核模式組件中的每一個子組件都提供了定義好的便於識別使用的功能函數接口,而且每個子組件都是相互獨立的。
對於Kernel-mode驅動編寫者主要需要關注的執行組件有:I/O Manager(輸入/輸出管理器)、configuration Manager(配置管理器)、Plug and Play Manager(即插即用管理器)、Power Manager(電源管理器)、Memory Manager(內存管理器)、Executive Support(執行支持)、Process Structure(進程結構)、Kernel(內核)以及 Hardware Abstraction Layer(HAL 硬件抽象層)。有些編寫者還需要關注的組件有Object Manager(對象管理器)和 Security Reference Monitor(安全基準監視器)。
在上圖中,File System(文件系統)、intermediate(中間件)和Lowest-Level Drivers(底層硬件驅動)這三個組件都包含在同一個I/O Manager組件中,這是因爲I/O操作的範圍太廣泛太複雜了,對於處理各類I/O操作的驅動也很多且瑣碎。
2、Windows驅動程序的類型
微軟的Windows驅動程序有兩個基本類型:
l User-mode Drivers在用戶模式下運行,它們提供了一個供Win32應用程序與Kernel-mode Drivers或者其他操作系統組件之間交互的接口。
例如,在Windows Vista系統中,所有的打印機驅動程序都運行在用戶模式。如果要深入瞭解打印機驅動組件,請參看 Introduction to Printing。
l Kernel-mode Drivers在內核模式下運行,並且是執行組件的一部分。執行組件由內核模式操作系統組件組成,主要用來管理I/O、即插即用內存、進程和線程、安全等等。Kernel-mode Drivers是分層結構。大體上,高一層的驅動程序通常接收來自應用程序、過濾器的數據,然後將數據傳遞給低一層的提供設備操作的驅動程序。
有些kernel-mode Drivers還是WDM驅動程序。所有的WDM驅動程序都支持即插即用、電源管理。WDM驅動程序是源碼兼容的(不是二進制碼兼容),可以運行在Windows98/Me、Windows2000和更新的操作系統下。
對於操作系統本身來說,kernel-mode drivers是由分散的、模快化組件來實現的,這些組件具有一套定義良好的功能函數。所有的kernel-mode drivers都提供一套系統定義的標準驅動例行程序。
下圖將kernel-mode drivers劃分了幾類:
上圖所示,kernel-mode drivers具有三個基本類型:Highest-level、intermediate(中間)、Lowest-level。這三種類型在功能上有很大不同,但是在結構上只有輕微的不同。
1. Highest-level drivers:包含支持文件系統的文件系統驅動(FSDs),例如:
n NTFS 基於NT技術的文件系統
n File allocation table(FAT) 基於文件分類表的文件系統
n CD-ROM file system(CDFS) 光盤存儲器文件系統
Highest-level drivers總是依賴低一層次的驅動支持,就像中間層功能驅動程序和底層硬件總線驅動程序。
2. Intermediate drivers:中間層驅動程序。例如虛擬磁盤、鏡像或者特定設備類型的class driver。中間層驅動程序依賴低一層次驅動程序的支持。中間層驅動程序再進一步可劃分爲:
n Function drivers(功能驅動程序)控制特定I/O總線上的外圍設備。
n Filter driver(過濾器驅動程序)插入他們本身的上一層或者下一層的功能驅動中。
n Software bus drivers(軟件總線驅動程序)提交一套子設備,並供高一層的類、功能或者過濾器驅動程序附加到上面。
例如,一個控制多功能適配器的驅動程序就是一個software bus drivers,因爲在多功能適配器上集成了多種設備。
n 一些系統支持的class driver提供了系統定義的class/miniclass接口。實際上一個中間層驅動程序就包含有一個或者多個相關聯的miniclass drivers(有時稱爲minidrivers)。每個相關聯的class/minidriver對提供的功能相當於一個function driver或者software bus driver。
3. Lowest-level drivers:控制一條連接外圍設備的I/O總線。Lowest-level drivers不依賴更低一層的驅動程序,因爲已經是最底層了。
n HardWare bus drivers(硬件總線驅動程序)由系統提供,並且通常控制I/O總線的動態分配。
硬件總線驅動程序與即插即用管理器協同工作來配置和重新配置系統硬件資源,爲所有連接在I/O總線上的由驅動程序控制的子設備。這些硬件資源包括設備內存映射和中斷請求(IRQs)。在比Windows2000系統還早的基於NT技術的操作系統中,硬件總線驅動程序歸入HAL的一些組件。
n Legacy drivers(遺留的驅動程序):直接控制物理設備的驅動程序。