Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Windows NT 教學 >> Windows NT 安裝

Windows NT 核心模式驅動程式開發基礎:架構、IRP、Dispatch 例程、IRQL、DPC 完整入門

編輯:Windows NT 安裝

Windows NT 採用分層驅動模型,核心模式驅動運行於 Ring 0 (Kernel Mode),透過 I/O Manager 統一管理 IRP (I/O Request Packet) 流轉。本文從系統架構、驅動分類、入口點、IRP 處理、IRQL 排程、關鍵物件六大面向,為驅動開發新手建立完整知識地圖。

一、系統架構與執行模式

  • User Mode (Ring 3):應用程式、環境子系統 (Win32、POSIX)、使用者模式 DLL。
  • Kernel Mode (Ring 0):核心、HAL、核心模式驅動、檔案系統、網路協定堆疊。
  • HAL:硬體抽象層,屏蔽平台差異,提供統一介面。
  • I/O Manager:驅動與上層溝通的核心,負責 IRP 建立、分派、完成、快取、裝置物件管理。

二、驅動分類

核心模式驅動
直接操作硬體:序列/平行埠、鍵盤、檔案系統、SCSI、網卡等。
專用驅動
視訊、列印、多媒體、VDM (虛擬 DOS) 等,透過特定介面間接操作硬體。

三、驅動程式結構與關鍵例程

  1. DriverEntry:唯一固定名稱的入口,註冊 Dispatch 例程、建立裝置物件、初始化硬體。
  2. DispatchOpen/Close:對應 CreateFile/CloseHandle。
  3. DispatchRead/Write:驗證請求 → 呼叫 StartIo 發起實際資料傳輸。
  4. DispatchDeviceControl:處理 DeviceIoControl 自訂控制碼。
  5. ISR (Interrupt Service Routine):高 IRQL 中斷處理,儘量精簡。
  6. DPC (Deferred Procedure Call):在 DISPATCH_LEVEL 延遲執行 ISR 留下的工作。
  7. Unload/Shutdown:資源釋放、狀態保存。

四、IRQL (Interrupt Request Level) 排程層級

IRQL名稱典型執行內容
0PASSIVE_LEVELDriverEntry、DispatchXxx、Unload、使用者執行緒
1APC_LEVEL特殊大量儲存裝置驅動
2DISPATCH_LEVELStartIo、DPC、Timer、鎖頁面鎖
3-31DIRQL硬體中斷處理 (ISR),數值對應中斷優先權

高 IRQL 可中斷低 IRQL;驅動開發必須遵守「在正確 IRQL 執行正確操作」原則 (如 DISPATCH_LEVEL 以上不可碰分頁記憶體)。

五、核心資料結構

IRP (I/O Request Packet)
每個 I/O 請求一個,含 Major/Minor Function、使用者緩衝區指標、狀態區塊、完成例程指標。
DEVICE_OBJECT
代表一個邏輯裝置,掛載在驅動物件鏈結串列中。
DRIVER_OBJECT
驅動映像在核心的代表,含 Dispatch 表、裝置鏈結頭指標。
DPC_OBJECT
排程延遲執行工作。

六、開發建議

  • 使用 WDK (Windows Driver Kit) + Visual Studio + 靜態分析工具 (SDV、PREfast)。
  • 優先考慮 KMDF (Kernel-Mode Driver Framework) 降低複雜度。
  • 嚴格區分 Paged/NonPaged Pool 記憶體配置。
  • 善用驅動驗證器 測試邊界條件。

掌握上述架構與流程,即具備編寫穩定核心模式驅動的理論基礎。

Copyright © Windows教程網 All Rights Reserved