驅動程式 是作業系統核心與特定硬體裝置(或特定軟體實體)之間的專用轉譯層。它封裝了裝置獨特的控制邏輯、資料格式、初始化/關機序列、錯誤處理等知識,向上層提供統一、抽象的介面(如檔案系統介面、網路介面、圖形繪圖介面),實現「同一介面、異構實作」。
核心職責
- 硬體初始化/掃描/電源管理:POST 階段偵測、ACPI 狀態切換(D0-D3)。
- 命令轉換與資料搬移:將 OS 通用 I/O 請求(IRP/URB)轉為裝置專屬指令序列,管理 DMA/中斷/記憶體映射 I/O。
- 錯誤處理與恢復:超時重試、韌體錯誤解碼、斷電保護、Bad Block 重導向。
- 同步與並發控制:自旋鎖、互斥體、完成事件,協調多執行緒存取。
Windows 平台形態演進
- 早期:
.SYS 核心模式驅動,直接鏈結核心。
- 現代:
.SYS 核心模式 + .DLL 使用者模式元件(UMDF/KMDF 框架),支援即插即用、驅動程式簽名強制、動態安裝/更新。
- 類別/微型驅動模型:類別驅動處理通用邏輯(如磁碟類別),微型驅動處理廠商特定細節(如 NVMe 控制器),最大化代碼重用。
驅動程式分層架構
應用程式
↓ Win32 API / Kernel32.dll
子系統 DLL (user32.dll, gdi32.dll...)
↓ 系統呼叫 (sysenter/syscall)
I/O 管理器 → 檔案系統驅動 → 磁碟類別驅動 → 磁碟微型驅動 → 埠驅動 → 介面卡驅動 → 硬體控制器
每一層只關注自身職責,向下委派,向上呈現標準介面。
開發與除錯關鍵
- WDK (Windows Driver Kit):官方開發套件,含編譯器、標頭、庫、驗證工具。
- 驅動程式簽名:WHQL 認證、EV 憑證簽名,核心模式強制簽名(x64)。
- 除錯工具:WinDbg (核心除錯)、Driver Verifier (壓力測試)、WPP 軟體追蹤、KMDF/UMDF 框架日誌。