首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Windows 檔案系統驅動開發基礎篇(一):環境建置與核心思維重塑

     編輯:關於C++

前言:為何寫這個系列?

耗時四個月,終於在國慶節完成基礎篇。初衷只有一個:在平靜的技術池裡投入幾顆石子,若能激起你探索未知的漣漪,便是最大成就。本系列面向業餘驅動開發愛好者,僅作入門引領,真正精華仍在參考書目中——知識積累必經「由薄到厚,再由厚到薄」的螺旋昇華。

Windows 核心架構鳥瞰

Windows 架構圖 1 Windows 架構圖 2

切入點鎖定 Win32 子系統(最熟悉的介面),研究重心置於 系統執行層 與 核心層。HAL 以下暫不展開。

核心模式開發:思維必須「破舊立新」

  • 幾乎全新的概念:設備對象、IRP、I/O 堆疊、DPC、自旋鎖…
  • C 語言思維直譯 C++ 會碰壁;同理,用戶模式思維寫驅動必摔得頭破血流。
  • 好消息:術語符合人類記憶規律,無奇技淫巧。勤奮一年,防火牆源碼可讀。

調試環境:生存裝備清單

工具角色備註
Visual Studio 200x IDE 編寫代碼 不直接編譯驅動
Windows IFS Kit + DDK 官方編譯器、標頭、庫 必選 xp/2000 目標
Compuware DriverStudio 3.x VS 整合、Wizard、VdwLibs 已停更,但支援 VS2005
Visual Assist X 語法提示、代碼導航神器 trial-reset 可長期試用
VMware / VirtualPC 雙機核心調試,避免實體機無限重啟 虛擬機稱「遠程機」

WinDbg 遠程調試建置步驟

  1. 宿主機安裝 WinDbg,設定符號路徑:
    SRV*c:\symbols*https://msdl.microsoft.com/download/symbols
  2. 本地隨意開啟一個 EXE 觸發符號下載,確認網路暢通。
  3. 遠程機 boot.ini 加入:
    /debug /debugport=com1 /baudrate=115200
  4. VMware 設定虛擬序列埠:命名管道模式,端點為 COM1。
  5. 遠程機選 Debug 模式啟動(多等 30 秒黑屏屬正常)。
  6. 宿主機 WinDbg:File → Kernel Debug,配置 COM1/115200,狂按 Ctrl+Alt+R 加速同步。
  7. 連接成功後輸入 g 讓遠程機繼續運行。

驅動編譯體系:Sources / Makefile / Dirs

DDK 編譯器與 VS 早已分道揚鑣,必須用 DDK Build 工具鏈 保證二進制一致性。

Sources 檔案範例

TARGETNAME=pnpevent
TARGETPATH=obj
TARGETTYPE=DRIVER
USE_PDB=1
INCLUDES=..\..\..\generic
TARGETLIBS=..\..\..\generic\obj$(BUILD_ALT_DIR)\i386\generic.lib
SOURCES= DriverEntry.cpp \
         stddcls.cpp \
         control.cpp \
         readwrite.cpp \
         driver.rc
  • # 註解,* 會被 Build 替換為平台字串(如 i386)。
  • TARGETTYPE 可為 DRIVER/DLL/LIB/EXE…
  • SOURCES 行尾 \ 表示續行。

編譯 VdwLibs2005.sln

位於 Compuware\DriverStudio\DriverWorks\source,VS2005 語法更嚴格,**必須依文檔修正源碼後再呼叫 DDK NMAKE 編譯**。

代碼規範與警告零容忍

// 不推薦
if (x) return y;

// 標準:永遠加大括號,防宏展開陷阱
if (x) {
    return y;
}

Sources 加入 MSC_WARNING_LEVEL=-W3,將警告視為錯誤——嚴謹態度能攔截無數潛在 Bug。

學習誤區與成長路徑

  1. 理論與實踐螺旋上升:別想一口吞下所有理論,也別純靠試錯。每階段「先理論後實踐」或「先實踐後理論」雙向迭代。
  2. 程式碼量門檻:2 萬行是分水嶺,未達標請狂寫。
  3. 英文閱讀:金山詞霸 + Google 翻譯 + 每日半篇 RFC,兩個月拿下 MSDN。
  4. 華老師金句:「天才在於勤奮,聰明在於積累。」技巧提速,基礎定高度。

參考資料(必讀)

  1. 《Windows NT Device Driver Development》——大師級著作,配套代碼為本系列主要來源。
  2. 《Windows Internals》——系統機制聖經。
  3. DDK 文檔 / MSDN——權威規格。
  4. OSR Online——工具、範例、社群。

留給你的思考題

VMware 虛擬序列埠最高支援多少 baudrate? 歡迎實測回報。

下一步預告

基礎篇僅止於 WDM/KMDF 入門門檻。完成後你會發現:自己以前寫的全是垃圾碼,但眼界已打開——看見控件之外的廣闊天地。預計 1-2 週消化本篇,下場見!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved