Windows 內核編程 Windows Kernel Programming

Pavel Yosifovich 李亮

買這商品的人也買了...

商品描述

在Windows系統中沒有什麼比內核更強大了,但是如何編寫內核驅動程序來利用這種強大能力呢?
這本書為讀者描述如何編寫Windows系統的軟件內核驅動程序。
這些驅動程序不涉及硬件,而是處理系統本身:進程、線程、模塊、註冊表等等。
內核代碼可用於監視重要事件,防止在需要時發生某些事件。
讀者可以通過編寫各種過濾器來攔截驅動程序中感興趣的調用。

作者簡介

Pavel Yosifovich

是著名的軟件開發者、培訓師、作者和演講者。
他熱愛關於軟件的一切,並且依然懷念他從前的Commodore 64電腦。
可以通過zodiacon@live.com聯繫他。


[譯者簡介]
李亮

資深程序員,從事軟件開發三十餘年。
從嵌入式系統到企業應用開發,從操作系統底層到Web前端技術均有涉足。
喜歡鑽研技術,對編寫代碼孜孜以求,也時常閱讀和翻譯相關技術書籍,追尋生活與工作之間的平衡。

目錄大綱

譯者序
第1章Windows內部概覽1
1.1進程1
1.2虛擬內存2
1.2.1頁狀態4
1.2.2系統內存4
1.3線程5
1.4系統服務7
1.5系統總體架構8
1.6句柄和對象10
1.6.1對象名稱11
1.6.2訪問已經存在的對象13

第2章開始內核開發15
2.1安裝工具15
2.2創建一個驅動程序項目16
2.3 DriverEntry和Unload例程17
2.4部署驅動程序19
2.5簡單的跟踪22
2.6練習24
2.7總結24

第3章內核編程基礎25
3.1內核編程的一般準則25
3.1.1未處理的異常26
3.1.2終止26
3.1.3函數返回值26
3.1.4 IRQL27
3.1.5 C++用法27
3.1.6測試和調試28
3.2調試構建與發布構建28
3.3內核API29
3.4函數和錯誤代碼30
3.5字符串30
3.6動態內存分配31
3.7鍊錶33
3.8驅動程序對象35
3.9設備對象36
3.10總結38

第4章驅動程序:從頭到尾39
4.1簡介39
4.2驅動程序初始化40
4.2.1將信息傳遞給驅動程序41
4.2.2客戶程序/驅動程序之間的通信協議42
4.2.3創建設備對象44
4.3客戶程序代碼46
4.4 Create和Close分發例程47
4.5 DeviceIoControl分發例程48
4.6安裝與測試52
4.7總結54

第5章調試55
5.1 Debugging Tools for Windows 55
5.2 WinDbg簡介56
5.3內核調試70
5.3.1本地內核調試70
5.3.2本地內核調試教程71
5.4完整內核調試77
5.4.1配置目標機78
5.4.2配置宿主機79
5.5內核驅動程序調試教程81
5.6總結83

第6章內核機制84
6.1中斷請求級別84
6.1.1提升和降低IRQL86
6.1.2線程優先級與IRQL87
6.2延遲過程調用88
6.3異步過程調用90
6.4結構化異常處理91
6.4.1使用__try/__except93
6.4.2使用__try/__finally95
6.4.3使用C++ RAII代替__try/__finally96
6.5系統崩潰98
6.5.1崩潰轉儲信息100
6.5.2分析轉儲文件103
6.5.3系統掛起105
6.6線程同步107
6.6.1互鎖操作107
6.6.2分發器對象108
6.6.3互斥量110
6.6.4快速互斥量113
6.6.5信號量114
6.6.6事件114
6.6.7執行體資源115
6.7高IRQL同步116
6.8工作項目119
6.9總結120

第7章I/O請求包121
7.1 IRP簡介121
7.2設備節點122
7.3 IRP和I/O棧位置126
7.4分發例程130
7.5訪問用戶緩衝區132
7.5.1緩衝I/O133
7.5.2直接I/O135
7.5.3 IRP_MJ_DEVICE_CONTROL的用戶緩衝區138
7.6匯總:Zero驅動程序139
7.6.1使用預編譯頭140
7.6.2 DriverEntry例程142
7.6.3讀分發例程143
7.6.4寫分發例程144
7.6.5測試應用144
7.7總結145

第8章進程和線程通知146
8.1進程通知146
8.2實現進程通知149
8.2.1 DriverEntry例程151
8.2.2處理進程退出通知152
8.2.3處理進程創建通知154
8.3將數據提供給用戶模式156
8.4線程通知160
8.5映像載入通知163
8.6練習164
8.7總結165

第9章對象和註冊表通知166
9.1對象通知166
9.1.1操作前回調168
9.1.2操作後回調170
9.2進程保護者驅動程序171
9.2.1對象通知註冊172
9.2.2管理受保護的進程172
9.2.3操作前回調176
9.2.4客戶應用177
9.3註冊表通知180
9.3.1處理操作前通知181
9.3.2處理操作後回調181
9.3.3性能考慮182
9.4實現註冊表通知182
9.4.1處理註冊表回調183
9.4.2修改後的客戶程序代碼185
9.5練習187
9.6總結187

第10章文件系統小過濾驅動188
10.1簡介188
10.2裝入與卸載189
10.3初始化191
10.3.1操作回調註冊194
10.3.2高度198
10.4安裝200
10.4.1 INF文件200
10.4.2安裝驅動程序206
10.5處理I/O操作206
10.5.1操作前回調207
10.5.2操作後回調209
10.6刪除保護驅動程序210
10.6.1處理創建前回調212
10.6.2處理設置信息前回調216
10.6.3重構218
10.6.4將驅動程序通用化221
10.6.5測試修改後的驅動程序225
10.7文件名227
10.7.1文件名的各個部分228
10.7.2 RAII FLT_FILE_NAME_INFORMATION包裝器231
10.8另一個刪除保護驅動程序232
10.8.1處理創建前回調和設置信息前回調239
10.8.2測試驅動程序241
10.9上下文241
10.10初始化I/O請求244
10.11文件備份驅動程序246
10.11.1創建後回調248
10.11.2寫前回調252
10.11.3清理後回調257
10.11.4測試驅動程序258
10.11.5恢復備份258
10.12用戶模式通信260
10.12.1創建通信端口261
10.12.2用戶模式連接262
10.12.3發送和接收消息263
10.12.4增強文件備份驅動程序264
10.12.5用戶模式客戶程序266
10.13調試268
10.14練習271
10.15總結271

第11章其他主題273
11.1驅動程序簽名273
11.2驅動程序驗證器276
11.3使用原生API282
11.4過濾驅動程序283
11.4.1過濾驅動程序的實現285
11.4.2附加過濾器286
11.4.3在任意時刻附加過濾器288
11.4.4過濾器的清理289
11.4.5基於硬件的過濾驅動程序的更多內容290
11.5設備監視器292
11.5.1增加過濾設備293
11.5.2移除過濾設備296
11.5.3初始化和卸載297
11.5 .4處理請求298
11.5.5測試驅動程序301
11.5.6請求的結果305
11.6驅動程序掛鉤307
11.7內核庫309
11.8總結310