|
Windows 的基本驅動架構
這里是一個基本的Windows 系統的架構,和一般對操作系統的架構的介紹稍微有點不同的是,對于系統底層做了分解。在硬件抽象層(HAL)上的系統核心處,標示了幾個核心構件,如文件系統驅動,可輸出的驅動例程及核心態的驅動(KMD)。而用戶態的驅動程序則劃分在應用程序層面。并不是所有的驅動程序都屬于系統核心層,這樣就可以降低核心崩潰的風險。

用戶態驅動和普通的應用程序一樣,以普通權限運行,只能通過Windows API進入與底層硬件打交道。而核心態的驅動則是操作系統構成的一部分,系統對其數據不做完整性檢查,則可能會導致系統崩潰。并且處于核心態的驅動程序難于調試。
以Xp系統中的打印機驅動程序為例,分為用戶界面部分和設備渲染部分。用戶界面部分如選擇紙張大小,設置是否雙面打印等,都是調用一般的Windows API,和普通應用程序一樣工作。而對于實際打印機控制的設備渲染部分,則處于核心態工作。用戶界面部分通過系統調用的形式對其進行控制(DeviceIoControl?),從而完成打印工作。
注:對于Vista以后的系統,渲染部分也在用戶態工作。
驅動的層次結構:

- 應用程序處于驅動棧的頂層,處理用戶和其他應用程序的請求,并且調用Win32 API或者用戶態驅動客戶端所暴露的例程。
- 用戶態客戶端驅動處理來自應用程序或Win32API的請求。對于需要核心態才能完成的服務,則調用Win32API,通過核心態驅動或支持例程完成該請求。這個驅動通常通過DLL方式實現。打印機驅動通常由很多操作是需要用戶態工作,所以會工作于用戶態。而存儲設備,網絡和輸入設備則不需要這樣。
- 核心態的客戶端驅動完成的工作與用戶態類似,只是完成無法在用戶態完成的操作。
- 設備類和迷你類驅動對提供設備支持的批量傳輸。類驅動提供特定類的設備中系統所需的并且與硬件獨立的支持。一般也是有MS提供。迷你驅動提供特定類中特定設備的操作。如電池類驅動提供了所有電池的通用操作,而一個UPS設備的迷你類驅動則處理這個設備的特殊操作。一般由硬件供應商提供。
- 對應于端口驅動 (對于一些設備,是宿主控制器或宿主適配器驅動) 支持下層端口,集線器,或所連接的物理設備的I/O操作。是否具有此類驅動,取決于設備類型以及它連接的總線類型。 存儲設備的全部驅動棧都有一個端口驅動。例如,SCSI端口驅動提供SCSI總線上的I/O。
對于 USB 設備,集線器和宿主控制器的驅動共同完成端口驅動工作。它們處理USB設備以及總線自己的I/O操作。
相應的微端口驅動處理與設備相關的操作。對于大部分端口,端口驅動由操作系統提供,而微端口驅動則由設備供應商提供。 - 最底部是硬件總線驅動。是操作系統的基本部分,由微軟提供,一般不需修改。
|
|