在Windows系統(tǒng)中沒有什么比內(nèi)核更強大了,但是如何編寫內(nèi)核驅(qū)動程序來利用這種強大能力呢?本書描述了如何編寫Windows系統(tǒng)的軟件內(nèi)核驅(qū)動程序,這類驅(qū)動程序不涉及硬件,只依賴于系統(tǒng)本身:進程、線程、模塊、注冊表等。內(nèi)核代碼可用于監(jiān)視重要事件,在需要時阻止某些事件的發(fā)生,讀者可以通過編寫各種過濾器來攔截驅(qū)動程序中的調(diào)用。本書的內(nèi)容從基本概念到實際應(yīng)用,較為深入地解析了Windows內(nèi)核技術(shù),適合具有一定Windows應(yīng)用開發(fā)經(jīng)驗的中OO讀者閱讀。
帕維爾·約西福維奇(Pavel Yosifovich)是OO的軟件開發(fā)者、培訓(xùn)師、作者和演講者。他熱愛關(guān)于軟件的一切,并且依然懷念他從前的Commodore 64電腦?梢酝ㄟ^zodiacon@live.com聯(lián)系他。
譯者序
OO章 Windows內(nèi)部概覽
1.1 進程
1.2 虛擬內(nèi)存
1.2.1 頁狀態(tài)
1.2.2 系統(tǒng)內(nèi)存
1.3 線程
1.4 系統(tǒng)服務(wù)
1.5 系統(tǒng)總體架構(gòu)
1.6 句柄和對象
1.6.1 對象名稱
1.6.2 訪問已經(jīng)存在的對象
第2章 開始內(nèi)核開發(fā)
2.1 安裝工具
2.2 創(chuàng)建一個驅(qū)動程序項目
2.3 DriverEntry和Unload例程
2.4 部署驅(qū)動程序
2.5 簡單的跟蹤
2.6 練習(xí)
2.7 總結(jié)
第3章 內(nèi)核編程基礎(chǔ)
3.1 內(nèi)核編程的一般準(zhǔn)則
3.1.1 未處理的異常
3.1.2 終止
3.1.3 函數(shù)返回值
3.1.4 IRQL
3.1.5 C++用法
3.1.6 測試和調(diào)試
3.2 調(diào)試構(gòu)建與發(fā)布構(gòu)建
3.3 內(nèi)核API
3.4 函數(shù)和錯誤代碼
3.5 字符串
3.6 動態(tài)內(nèi)存分配
3.7 鏈表
3.8 驅(qū)動程序?qū)ο?nbsp;
3.9 設(shè)備對象
3.10 總結(jié)
第4章 驅(qū)動程序:從頭到尾
4.1 簡介
4.2 驅(qū)動程序初始化
4.2.1 將信息傳遞給驅(qū)動程序
4.2.2 客戶程序/驅(qū)動程序之間的通信協(xié)議
4.2.3 創(chuàng)建設(shè)備對象
4.3 客戶程序代碼
4.4 Create和Close分發(fā)例程
4.5 DeviceIoControl分發(fā)例程
4.6 安裝與測試
4.7 總結(jié)
第5章 調(diào)試
5.1 Debugging Tools for Windows
5.2 WinDbg簡介
5.3 內(nèi)核調(diào)試
5.3.1 本地內(nèi)核調(diào)試
5.3.2 本地內(nèi)核調(diào)試教程
5.4 完整內(nèi)核調(diào)試
5.4.1 配置目標(biāo)機
5.4.2 配置宿主機
5.5 內(nèi)核驅(qū)動程序調(diào)試教程
5.6 總結(jié)
第6章 內(nèi)核機制
6.1 中斷請求級別
6.1.1 提升和降低IRQL
6.1.2 線程優(yōu)先級與IRQL
6.2 延遲過程調(diào)用
6.3 異步過程調(diào)用
6.4 結(jié)構(gòu)化異常處理
6.4.1 使用__try/__except
6.4.2 使用__try/__finally
6.4.3 使用C++ RAII代替__try/__finally
6.5 系統(tǒng)崩潰
6.5.1 崩潰轉(zhuǎn)儲信息
6.5.2 分析轉(zhuǎn)儲文件
6.5.3 系統(tǒng)掛起
6.6 線程同步
6.6.1 互鎖操作
6.6.2 分發(fā)器對象
6.6.3 互斥量
6.6.4 快速互斥量
6.6.5 信號量
6.6.6 事件
6.6.7 執(zhí)行體資源
6.7 高IRQL同步
6.8 工作項目
6.9 總結(jié)
第7章 I/O請求包
7.1 IRP簡介
7.2 設(shè)備節(jié)點
7.3 IRP和I/O棧位置
7.4 分發(fā)例程
7.5 訪問用戶緩沖區(qū)
7.5.1 緩沖I/O
7.5.2 直接I/O
7.5.3 IRP_MJ_DEVICE_CONTROL的用戶緩沖區(qū)
7.6 匯總:Zero驅(qū)動程序
7.6.1 使用預(yù)編譯頭
7.6.2 DriverEntry例程
7.6.3 讀分發(fā)例程
7.6.4 寫分發(fā)例程
7.6.5 測試應(yīng)用
7.7 總結(jié)
第8章 進程和線程通知
8.1 進程通知
8.2 實現(xiàn)進程通知
8.2.1 DriverEntry例程
8.2.2 處理進程退出通知
8.2.3 處理進程創(chuàng)建通知
8.3 將數(shù)據(jù)提供給用戶模式
8.4 線程通知
8.5 映像載入通知
8.6 練習(xí)
8.7 總結(jié)
第9章 對象和注冊表通知
9.1 對象通知
9.1.1 操作前回調(diào)
9.1.2 操作后回調(diào)
9.2 進程保護者驅(qū)動程序
9.2.1 對象通知注冊
9.2.2 管理受保護的進程
9.2.3 操作前回調(diào)
9.2.4 客戶應(yīng)用
9.3 注冊表通知
9.3.1 處理操作前通知
9.3.2 處理操作后回調(diào)
9.3.3 性能考慮
9.4 實現(xiàn)注冊表通知
9.4.1 處理注冊表回調(diào)
9.4.2 修改后的客戶程序代碼
9.5 練習(xí)
9.6 總結(jié)
OO0章 文件系統(tǒng)小過濾驅(qū)動
10.1 簡介
10.2 裝入與卸載
10.3 初始化
10.3.1 操作回調(diào)注冊
10.3.2 高度
10.4 安裝
10.4.1 INF文件
10.4.2 安裝驅(qū)動程序
10.5 處理I/O操作
10.5.1 操作前回調(diào)
10.5.2 操作后回調(diào)
10.6 刪除保護驅(qū)動程序
10.6.1 處理創(chuàng)建前回調(diào)
10.6.2 處理設(shè)置信息前回調(diào)
10.6.3 重構(gòu)
10.6.4 將驅(qū)動程序通用化
10.6.5 測試修改后的驅(qū)動程序
10.7 文件名
10.7.1 文件名的各個部分
10.7.2 RAII FLT_FILE_NAME_INFORMATION包裝器
10.8 另一個刪除保護驅(qū)動程序
10.8.1 處理創(chuàng)建前回調(diào)和設(shè)置信息前回調(diào)
10.8.2 測試驅(qū)動程序
10.9 上下文
10.10 初始化I/O請求
10.11 文件備份驅(qū)動程序
10.11.1 創(chuàng)建后回調(diào)
10.11.2 寫前回調(diào)
10.11.3 清理后回調(diào)
10.11.4 測試驅(qū)動程序
10.11.5 恢復(fù)備份
10.12 用戶模式通信
10.12.1 創(chuàng)建通信端口
10.12.2 用戶模式連接
10.12.3 發(fā)送和接收消息
10.12.4 增強文件備份驅(qū)動程序
10.12.5 用戶模式客戶程序
10.13 調(diào)試
10.14 練習(xí)
10.15 總結(jié)
OO1章 其他主題
11.1 驅(qū)動程序簽名
11.2 驅(qū)動程序驗證器
11.3 使用原生API
11.4 過濾驅(qū)動程序
11.4.1 過濾驅(qū)動程序的實現(xiàn)
11.4.2 附加過濾器
11.4.3 在任意時刻附加過濾器
11.4.4 過濾器的清理
11.4.5 基于硬件的過濾驅(qū)動程序的更多內(nèi)容
11.5 設(shè)備監(jiān)視器
11.5.1 增加過濾設(shè)備
11.5.2 移除過濾設(shè)備
11.5.3 初始化和卸載
11.5.4 處理請求
11.5.5 測試驅(qū)動程序
11.5.6 請求的結(jié)果
11.6 驅(qū)動程序掛鉤
11.7 內(nèi)核庫
11.8 總結(jié)