內容簡介
Windows最新的WDF驅動程式框架,包括KMDF和UMDF,KMDF是WDM的繼續。本書主要介紹KMDF設備驅動程式的原理及編程方法;詳細介紹KMDF對象及程式基本框架,KMDF和應用程式之間的通信、即插即用和電源管理的編程技術,過濾器驅動程式,KMDF訪問硬體設備、處理硬體中斷、實現DMA操作的編程技術,以及USB接口和PCI接口設備驅動程式KMDF的開發。還對UMDF設備驅動程式作了編程入門介紹。前言
Windows設備驅動程式,過去是WDM(Windows Driver Model)框架,編程複雜,初學者難以掌握其編程要領。為了解決這一問題,微軟對WDM驅動程式的架構做了改進,形成了全新的WDF(Windows Driver Foundation)框架結構。它提供了面向對象和事件驅動的驅動程式開發框架,大大降低了開發難度。從現在開始,掌握Windows設備驅動程式的開發人員,由過去的“專業”人士,將變為“普通”大眾。
WDF驅動程式包括兩個類型,一個是核心級的,稱為KMDF(Kernel-Mode Driver Framework),為SYS檔案;另一個是用戶級的,稱為UMDF(User-Mode Driver Framework),為DLL檔案。
核心模式驅動程式:這類驅動程式作為核心模式作業系統組件的一部分執行,它們管理I/O、即插即用、記憶體、進程和執行緒、安全等。核心模式驅動程式通常為分層結構。
用戶模式驅動程式:這類驅動程式通常提供 Win32 應用程式與核心模式驅動程式或其他作業系統組件之間的接口。用戶模式驅動程式支持基於協定或基於串列匯流排(如攝像機和便攜音樂播放器)的設備。
WDF的運行平台有:Microsoft Windows Server® 2008、Microsoft Windows Vista™、Microsoft Windows Server® 2003、Microsoft Windows XP、Microsoft Windows 2000 (KMDF only)。
本書內容
本書主要討論KMDF,KMDF是WDM的繼續,可以把WDM驅動程式轉換為KMDF驅動程式。還對UMDF設備驅動程式作了編程入門介紹。
過去,我研究過如何用driverstudio開發工具開發Windows下的WDM設備驅動程式,承蒙電子工業出版社的厚愛,出版了《Windows 2000/XP WDM設備驅動程式開發》一書。
WDF的簡單化編程,導致DriverStudio退出了Windows設備驅動程式的開發,將DriverStudio定格在3.2版本。
從形式上看,KMDF的對象和DriverStudio的類,具有相似的地方。本書的內容安排和《Windows 2000/XP WDM設備驅動程式開發》的基本一致,具體安排如下:
章 名 主 要 內 容
第1章 Windows 2000和WDM驅動程式 KMDF是WDM的繼續,KMDF構建在WDM之上。對於一些Windows驅動程式的基本概念,初學者仍需要了解,如Windows 2000中的組件、驅動程式種類,以及WDM驅動程式特點等
第2章 KMDF驅動程式框架 KMDF驅動程式框架由對象和事件回調例程構成。KMDF框架中所有的事物都由對象來表示,各種事件處理都由事件回調例程來完成。學習KMDF編程,主要是學習KMDF的各種對象、對象函式和事件回調例程的編程
第3章 基本對象 KMDF提供了許多對象,本章只介紹一些基本的對象,如WDFREQUEST對象、WDFQUEUE對象等,還介紹了數據同步訪問、字元串操作和QueueSample實例
第4章 KMDF驅動程式編程入門 介紹Windows Vista下的KMDF驅動程式編程入門,包括KMDF驅動程式編程環境的建立,KMDF的創建、生成及安裝過程,以及Win32 Console和MFC兩種應用程式的編程
第5章 KMDF驅動程式和應用程式之間的通信 介紹應用程式與KMDF之間的通信,包括應用程式對KMDF的通信,以及KMDF對應用程式的通信
第6章 即插即用例程 主要介紹PnP組件、即插即用例程的載入和卸載順序及PnpPowerSample實例等
第7章 電源管理 主要介紹系統電源狀態與設備電源狀態、電源管理控制標誌位、設備的喚醒特徵和空閒檢測、電源管理編程及IdleSample實例等
第8章 KMDF過濾器驅動程式 描述如何寫一個過濾器驅動程式,該驅動程式可位於功能驅動程式的上面或下面,它通過過濾流經它的IRP來修改設備的行為
第9章 USB設備開發 主要介紹USB設備的配置/接口/端點、USB數據的傳輸方式、USB描述符、USB編程對象、USB編程(如激活配置與中止配置、同步操作、異步操作)及USBSample實例等
第10章 PCI設備驅動程式開發 本章就硬體訪問、中斷處理和DMA傳輸3個方面展開討論,並以CY7C09449晶片為例,給出一個經過測試的PCI設備驅動程式實例——PCISample實例。另外,還給出了一個不依靠硬體設備的DMASample實例
第11章 UMDF驅動程式編程入門 介紹UMDF驅動程式編程入門,包括UMDF驅動程式的創建、生成及安裝,以及一個簡單的實例編程
第12章 WinDbg使用介紹 WinDbg是微軟提供的一個功能非常強大的調試軟體,可以在原始碼級別調試Windows下的WDF驅動程式。本章主要介紹用WinDbg調試KMDF和UMDF
微軟推薦的WDF書籍是《Developing Drivers with the Microsoft Windows Driver Foundation》,作者是Penny Orwick和Guy Smith。
微軟提供的學習WDF的中文網站地址是:www. microsoft. com/china/whdc。
開發工具
微軟提供的WDF驅動程式開發工具包WDK的最新版本是WDK 1.7,可以從其網站下載。
本書實現WDF驅動程式及應用程式實例所用的工具是:Visual C++ 6.0和WDK 1.7。
本書配套光碟
本書配套光碟中含有書中所有實例的驅動程式和應用程式的全部原始碼,以及生成的驅動程式和可執行的應用程式。除USBSample和PCISample實例因需要硬體設備的支持,讀者無法運行外,其他11個實例均可在Windows XP和Vista下運行。
本書特點
編程入門:詳細的步驟介紹,初學者的良師益友。
套用實例:對程式作了必要的注釋,了解驅動程式編程的捷徑。
簡單實用:KMDF的編程非常簡單,Winows硬體開發工程師必須掌握。
理解深刻:筆者精通Winows設備驅動程式開發和硬體開發,所有實例均為自己創造,每個實例都有其獨特意義,筆者用實例詮釋自己對KMDF的理解和認識。
微軟推薦的WDF書籍是“理論派”,以講解理論為主,講得非常詳細和全面;本書是“實戰派”,全書以實例為主,用實例帶你快速入門。
善於學習,勤于思考,勇於實踐。用這句話與投身硬體開發的青年學子共勉。
希望這本書能對您現在或將來的工作有所幫助。
本書得以順利出版,要特別感謝周利莉的一貫支持;感謝何海洋和趙慶花的支持;感謝陳建波和何亞壘的支持;感謝朱沭紅編輯和電子工業出版社。
由於作者的理論水平有限,書中難免出現差錯和遺漏,敬請廣大計算機套用開發人員批評指正,
十年時間,跟蹤Windows設備驅動程式的開發,驅動程式VxD->WDM->KMDF,工具VtoolsD->DDK、DriverWorks->WDK,但願WDF長久。別了WDM,別了DriverStudio。
武安河
2009年元旦
目錄
第1章 Windows 2000和WDM驅動程式 1
1.1 Windows 2000組件概述 1
1.2 Windows 2000中的驅動程式種類 3
1.3 WDM驅動程式特點 4
1.2.1 核心模式驅動程式的設計目標 4
1.3.2 WDM驅動程式模型 7
1.3.3 設備和驅動程式的層次結構 8
1.3.4 中斷級別IRQL9
1.3.5 設備接口 10
第2章 KMDF驅動程式框架 12
2.1 KMDF對象 12
2.1.1 對象概念 12
2.1.2 基本對象 17
2.2 KMDF程式結構 18
2.2.1 DriverEntry例程 19
2.2.2 EvtDriverDeviceAdd例程 22
2.2.3 I/O處理例程 25
2.2.4 即插即用和電源管理例程 30
2.3 CharSample實例 30
第3章 基本對象 32
3.1 WDFREQUEST對象 32
3.1.1 WDFREQUEST對象函式 32
3.1.2 I/O請求基本操作 38
3.2 WDFQUEUE對象 44
3.2.1 WDFQUEUE對象函式 46
3.2.2 佇列編程 48
3.3 WDFTIMER對象 50
3.4 WDFDPC對象 52
3.5 WDFWORKITEM對象 53
3.6 WDFMEMORY對象 55
3.7 數據同步訪問 56
3.7.1 WDFSPINLOCK對象 57
3.7.2 WDFWAITLOCK對象 58
3.8 字元串操作 58
3.8.1 字元串格式 58
3.8.2 WDFSTRING對象 59
3.8.3 串處理函式 60
3.9 QueueSample實例 61
第4章 KMDF驅動程式編程入門 70
4.1 建立KMDF編程環境 70
4.2 創建KMDF驅動程式 71
4.3 生成KMDF驅動程式 72
4.4 安裝KMDF驅動程式 73
4.5 RegSample實例 78
4.5.1 RegSample驅動程式 78
4.5.2 Win32 Console應用程式 92
4.5.3MFC應用程式98
4.6 調試說明 103
第5章 KMDF驅動程式和應用程式之間的通信 104
5.1 應用程式對驅動程式的通信 104
5.1.1 打開設備 105
5.1.2 關閉設備 106
5.1.3DeviceIoControl函式調用 106
5.1.4 ReadFile和WriteFile函式調用 111
5.1.5 IOSample實例 112
5.2 驅動程式對應用程式的通信 116
5.2.1 DeviceIoControl異步完成 116
5.2.2 WIN32事件通知 117
5.3 驅動程式對應用程式通信實例 119
5.3.1 異步完成實例CancelSample 120
5.3.2 事件通知實例EventSample 130
第6章 即插即用例程 145
6.1 即插即用簡介 145
6.1.1 PnP組件 145
6.1.2 即插即用例程 146
6.1.3 例程的載入和卸載順序 150
6.2 PnpPowerSample實例 152
第7章 電源管理 160
7.1 電源管理簡介 160
7.1.1 系統電源狀態與設備電源狀態 160
7.1.2 電源管理控制標誌位 162
7.1.3 設備的喚醒特徵和空閒檢測 163
7.2 電源管理編程 163
7.2.1 電源管理基本例程 164
7.2.2 設備喚醒 164
7.2.3 空閒檢測 166
7.3 IdleSample實例 168
第8章 KMDF過濾器驅動程式 174
8.1 KMDF過濾器驅動程式的編程 175
8.2 KMDF過濾器驅動程式安裝 176
8.3 FilterSample實例 177
第9章 USB設備開發 188
9.1 USB接口概述 188
9.1.1 USB設備的配置、接口和端點 189
9.1.2 USB數據的傳輸方式 192
9.1.3 USB描述符 199
9.1.4 標準設備請求 207
9.2 USB編程對象 210
9.2.1 WDFUSBDEVICE對象 210
9.2.2 WDFUSBINTERFACE對象 215
9.2.3 WDFUSBPIPE對象 218
9.3 USB編程 222
9.3.1 激活配置與中止配置 222
9.3.2 同步操作 224
9.3.3 異步操作 225
9.4 USBSample實例 227
第10章 PCI設備驅動程式開發 244
10.1 硬體訪問 245
10.1.1 I/O訪問 245
10.1.2 存儲器訪問 248
10.1.3 硬體訪問編程 251
10.2 中斷處理 254
10.2.1 WDFINTERRUPT對象 254
10.2.2 中斷處理編程 257
10.3 DMA傳輸 258
10.3.1 DMA編程對象 258
10.3.2 DMA傳輸編程 267
10.4 PCISample實例 268
10.5 DMASample實例 279
第11章 UMDF驅動程式編程入門 297
11.1 UMDF編程環境 297
11.2 創建UMDF驅動程式 297
11.3 生成UMDF驅動程式 299
11.4 安裝UMDF驅動程式 299
11.5 UMDFSample實例 302
11.5.1 驅動程式 302
11.5.2 Win32 Console應用程式 339
第12章 WinDbg使用介紹 340
12.1 用WinDbg調試KMDF 340
12.1.1 目標機的設定 341
12.1.2 主控機的路徑設定 343
12.1.3 建立連線 343
12.1.4 載入符號檔案344
12.1.5 設定斷點 345
12.1.6 斷點執行 346
12.1.7 下載符號包 347
12.2 用WinDbg調試UMDF 348
12.2.1 路徑設定 348
12.2.2 連結進程 348
12.2.3 設定斷點 349
12.2.4 使能UMDF載入和初始化代碼調試 350
參考文獻 351
書摘
第1章 Windows 2000和WDM驅動程式
雖然本書介紹KMDF的編程,但是KMDF是WDM的繼續,KMDF構建在WDM之上。對於一些Windows驅動程式的基本概念,初學者仍需要了解。所以,保留了參考文獻(即《Windows 2000/XP WDM設備驅動程式開發(第2版)》一書)的第l章,供初學者閱讀。
1.1 Windows 2000組件概述
圖1-1顯示了Windows 2000作業系統環境的主要組件。在Windows 2000作業系統環境中,一部分組件運行在用戶模式下,其他的則運行在核心模式下。
Windows 2000作業系統包括許多核心模式組件,它們被精心地定義為功能相互獨立的組件。對核心模式驅動程式設計者來說,最感興趣的就是核心、I/O管理器、即插即用(PIlP)管理器、電源管理器、硬體抽象層、配置管理器、記憶體管理器、運行支持和進程結構組件。對另一些設計者來說,感興趣的其他組件可能還包括對象管理器和安全引用監視器。