在Windows系統(tǒng)中沒有什么比內(nèi)核更強(qiáng)大了,但是如何編寫內(nèi)核驅(qū)動(dòng)程序來利用這種強(qiáng)大能力呢?本書描述了如何編寫Windows系統(tǒng)的軟件內(nèi)核驅(qū)動(dòng)程序,這類驅(qū)動(dòng)程序不涉及硬件,只依賴于系統(tǒng)本身:進(jìn)程、線程、模塊、注冊表等。內(nèi)核代碼可用于監(jiān)視重要事件,在需要時(shí)阻止某些事件的發(fā)生,讀者可以通過編寫各種過濾器來攔截驅(qū)動(dòng)程序中的調(diào)用。本書的內(nèi)容從基本概念到實(shí)際應(yīng)用,較為深入地解析了Windows內(nèi)核技術(shù),適合具有一定Windows應(yīng)用開發(fā)經(jīng)驗(yàn)的中OO讀者閱讀。
帕維爾·約西福維奇(Pavel Yosifovich)是OO的軟件開發(fā)者、培訓(xùn)師、作者和演講者。他熱愛關(guān)于軟件的一切,并且依然懷念他從前的Commodore 64電腦?梢酝ㄟ^zodiacon@live.com聯(lián)系他。
譯者序
OO章 Windows內(nèi)部概覽
1.1 進(jìn)程
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)建一個(gè)驅(qū)動(dòng)程序項(xiàng)目
2.3 DriverEntry和Unload例程
2.4 部署驅(qū)動(dòng)程序
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ù)和錯(cuò)誤代碼
3.5 字符串
3.6 動(dòng)態(tài)內(nèi)存分配
3.7 鏈表
3.8 驅(qū)動(dòng)程序?qū)ο?nbsp;
3.9 設(shè)備對象
3.10 總結(jié)
第4章 驅(qū)動(dòng)程序:從頭到尾
4.1 簡介
4.2 驅(qū)動(dòng)程序初始化
4.2.1 將信息傳遞給驅(qū)動(dòng)程序
4.2.2 客戶程序/驅(qū)動(dòng)程序之間的通信協(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)機(jī)
5.4.2 配置宿主機(jī)
5.5 內(nèi)核驅(qū)動(dòng)程序調(diào)試教程
5.6 總結(jié)
第6章 內(nèi)核機(jī)制
6.1 中斷請求級(jí)別
6.1.1 提升和降低IRQL
6.1.2 線程優(yōu)先級(jí)與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)儲(chǔ)信息
6.5.2 分析轉(zhuǎn)儲(chǔ)文件
6.5.3 系統(tǒng)掛起
6.6 線程同步
6.6.1 互鎖操作
6.6.2 分發(fā)器對象
6.6.3 互斥量
6.6.4 快速互斥量
6.6.5 信號(hào)量
6.6.6 事件
6.6.7 執(zhí)行體資源
6.7 高IRQL同步
6.8 工作項(xiàng)目
6.9 總結(jié)
第7章 I/O請求包
7.1 IRP簡介
7.2 設(shè)備節(jié)點(diǎn)
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ū)動(dòng)程序
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章 進(jìn)程和線程通知
8.1 進(jìn)程通知
8.2 實(shí)現(xiàn)進(jìn)程通知
8.2.1 DriverEntry例程
8.2.2 處理進(jìn)程退出通知
8.2.3 處理進(jìn)程創(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 進(jìn)程保護(hù)者驅(qū)動(dòng)程序
9.2.1 對象通知注冊
9.2.2 管理受保護(hù)的進(jìn)程
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 實(shí)現(xiàn)注冊表通知
9.4.1 處理注冊表回調(diào)
9.4.2 修改后的客戶程序代碼
9.5 練習(xí)
9.6 總結(jié)
OO0章 文件系統(tǒng)小過濾驅(qū)動(dòng)
10.1 簡介
10.2 裝入與卸載
10.3 初始化
10.3.1 操作回調(diào)注冊
10.3.2 高度
10.4 安裝
10.4.1 INF文件
10.4.2 安裝驅(qū)動(dòng)程序
10.5 處理I/O操作
10.5.1 操作前回調(diào)
10.5.2 操作后回調(diào)
10.6 刪除保護(hù)驅(qū)動(dòng)程序
10.6.1 處理創(chuàng)建前回調(diào)
10.6.2 處理設(shè)置信息前回調(diào)
10.6.3 重構(gòu)
10.6.4 將驅(qū)動(dòng)程序通用化
10.6.5 測試修改后的驅(qū)動(dòng)程序
10.7 文件名
10.7.1 文件名的各個(gè)部分
10.7.2 RAII FLT_FILE_NAME_INFORMATION包裝器
10.8 另一個(gè)刪除保護(hù)驅(qū)動(dòng)程序
10.8.1 處理創(chuàng)建前回調(diào)和設(shè)置信息前回調(diào)
10.8.2 測試驅(qū)動(dòng)程序
10.9 上下文
10.10 初始化I/O請求
10.11 文件備份驅(qū)動(dòng)程序
10.11.1 創(chuàng)建后回調(diào)
10.11.2 寫前回調(diào)
10.11.3 清理后回調(diào)
10.11.4 測試驅(qū)動(dòng)程序
10.11.5 恢復(fù)備份
10.12 用戶模式通信
10.12.1 創(chuàng)建通信端口
10.12.2 用戶模式連接
10.12.3 發(fā)送和接收消息
10.12.4 增強(qiáng)文件備份驅(qū)動(dòng)程序
10.12.5 用戶模式客戶程序
10.13 調(diào)試
10.14 練習(xí)
10.15 總結(jié)
OO1章 其他主題
11.1 驅(qū)動(dòng)程序簽名
11.2 驅(qū)動(dòng)程序驗(yàn)證器
11.3 使用原生API
11.4 過濾驅(qū)動(dòng)程序
11.4.1 過濾驅(qū)動(dòng)程序的實(shí)現(xiàn)
11.4.2 附加過濾器
11.4.3 在任意時(shí)刻附加過濾器
11.4.4 過濾器的清理
11.4.5 基于硬件的過濾驅(qū)動(dòng)程序的更多內(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ū)動(dòng)程序
11.5.6 請求的結(jié)果
11.6 驅(qū)動(dòng)程序掛鉤
11.7 內(nèi)核庫
11.8 總結(jié)