出版時間:2008年9月 出版社:清華大學(xué)出版社 作者:Jeffrey Richter,Christophe Nasarre 頁數(shù):770 譯者:葛子昂,周靖,廖敏
Tag標(biāo)簽:無
前言
Windows世界已經(jīng)發(fā)生了許多變化,WindowsXP、Windows2003、Windowsvigta以及。WindowsServer2008相繼推出。與之對應(yīng)的,《Windows核心編程》(第5版)也與時俱進(jìn),針對最新的操作系統(tǒng)進(jìn)行更新,為我們了解并發(fā)揮最新的平臺特性提供了寶貴的指引。這是一本W(wǎng)indows系統(tǒng)編程的權(quán)威專著,許多年之前我就已經(jīng)讀過它的第4版;這是一本生動的教科書,它幫助我更深入地了解Windows系統(tǒng);同時它又是一本參考書,在我開發(fā)’Windows應(yīng)用程序的過程中遇到問題時,我會到本書中尋找答案。希望它同樣能夠?yàn)槟愦鹨山饣?,并解決你的實(shí)際問題。本書由葛子昂、周靖、廖敏共同翻譯:第8~22章由葛子昂翻譯,第1~6章由周靖翻譯,第23~26章及附錄由廖敏翻譯,第7章由劉江友情客串翻譯,全書由葛子昂最終審閱和統(tǒng)稿。鑒于時間和精力有限,一些翻譯難免存在不足甚至錯誤之處,為此我建立了一份網(wǎng)上勘誤表。如果讀者發(fā)現(xiàn)任何錯誤,都可以通過該網(wǎng)頁與我聯(lián)系,一旦確認(rèn),我會立即將其更新到勘誤表中??闭`表的網(wǎng)址為www.gesoftfactory.com/ge/WindowsViaCpp。最后,感謝Jeffrey和Christophe在本書翻譯過程中不厭其煩地解答我的問題,核實(shí)并糾正英文版中發(fā)現(xiàn)的一些錯誤。感謝李勁松、王淵峰、張羿、孫展波、譚映輝以及孫祺對中文版的全部或部分章節(jié)進(jìn)行了審閱并提出寶貴的意見。感謝潘愛民在百忙中抽空閱讀部分譯稿,并給以反饋。感謝妻兒和家人對我的理解和支持,本書的翻譯工作占用了本應(yīng)屬于你們的時間,現(xiàn)在終于可以有更多時間來陪伴你們了。
內(nèi)容概要
這是一本經(jīng)典的Windows核心編程指南,從第1版到第5版,引領(lǐng)著數(shù)十萬程序員走入Windows開發(fā)陣營,培養(yǎng)了大批精英。
作為Windows開發(fā)人員的必備參考,本書是為打算理解Windows的C和C++程序員精心設(shè)計的。第5版全面覆蓋Windows
XP,Windows Vista和Windows Server
2008中的170個新增函數(shù)和Windows特性。書中還講解了Windows系統(tǒng)如何使用這些特性,我們開發(fā)的應(yīng)用程序又如何充分使用這些特性,如何自行創(chuàng)建新的特性。
作者簡介
Jeffrey
Richter是Wintellect公司的創(chuàng)始人之一,該公司從事培訓(xùn)、調(diào)試和咨詢,致力于幫助其他公司以更快的速度開發(fā)出更優(yōu)秀的軟件。他著作頗豐,代表作有暢銷書CLR
viaC#。他還是MSDN Magazine的特約編輯和專欄作家。
書籍目錄
第Ⅰ部分 必備知識
第1章 錯誤處理
1.1 定義自己的錯誤代碼
1.2 ErrorShow示例程序
第2章 字符和字符串處理
2.1 字符編碼
2.2 ANSI字符和Unicode字符與字符串?dāng)?shù)據(jù)類型
2.3 Windows中的Unicode函數(shù)和ANSI函數(shù)
2.4 C運(yùn)行庫中的Unicode函數(shù)和ANSI函數(shù)
2.5 C運(yùn)行庫中的安全字符串函數(shù)
2.5.1 初識新的安全字符串函數(shù)
2.5.2 在處理字符串時如何獲得更多控制
2.5.3 Windows字符串函數(shù)
2.6 為何要用Unicode
2.7 推薦的字符和字符串處理方式
2.8 Unicode與ANSI字符串轉(zhuǎn)換
2.8.1 導(dǎo)出ANSI和Unicode DLL函數(shù)
2.8.2 判斷文本是ANSI還是Unicode
第3章 內(nèi)核對象
3.1 何為內(nèi)核對象
3.1.1 使用計數(shù)
3.1.2 內(nèi)核對象的安全性
3.2 進(jìn)程內(nèi)核對象句柄表
3.2.1 創(chuàng)建一個內(nèi)核對象
3.2.2 關(guān)閉內(nèi)核對象
3.3 跨進(jìn)程邊界共享內(nèi)核對象
3.3.1 使用對象句柄繼承
3.3.2 改變句柄的標(biāo)志
3.3.3 為對象命名
3.3.4 終端服務(wù)命名空間
3.3.5 專有命名空間
3.3.5 復(fù)制對象句柄
第Ⅱ部分 工作機(jī)制
第4章 進(jìn)程
4.1 編寫第一個Windows應(yīng)用程序
4.1.1 進(jìn)程實(shí)例句柄
4.1.2 進(jìn)程前一個實(shí)例的句柄
4.1.3 進(jìn)程的命令行
4.1.4 進(jìn)程的環(huán)境變量
4.1.5 進(jìn)程的關(guān)聯(lián)性
4.1.6 進(jìn)程的錯誤模式
4.1.7 進(jìn)程當(dāng)前所在的驅(qū)動器和目錄
4.1.8 進(jìn)程的當(dāng)前目錄
4.1.9 系統(tǒng)版本
4.2 CreateProcess函數(shù)
4.2.1 pszApplicationName和pszCommandLine參數(shù)
4.2.2 psaProcess,psaThread和bInheritHandles參數(shù)
4.2.3 fdwCreate參數(shù)
4.2.4 pvEnvironment參數(shù)
4.2.5 pszCurDir參數(shù)
4.2.6 psiStartInfo參數(shù)
4.2.7 ppiProcInfo參數(shù)
4.3 終止進(jìn)程
4.3.1 主線程的入口點(diǎn)函數(shù)返回
4.3.2 ExitProcess函數(shù)
4.3.3 TerminateProcess函數(shù)
4.3.4 當(dāng)進(jìn)程中的所有線程終止時
4.3.5 當(dāng)進(jìn)程終止運(yùn)行時
4.4 子進(jìn)程
4.5 管理員以標(biāo)準(zhǔn)用戶權(quán)限運(yùn)行時
4.5.1 自動提升進(jìn)程的權(quán)限
4.5.2 手動提升進(jìn)程的權(quán)限
4.5.3 何為當(dāng)前權(quán)限上下文
4.5.4 枚舉系統(tǒng)中正在運(yùn)行的進(jìn)程
4.5.5 Process Information示例程序
第5章 作業(yè)
5.1 對作業(yè)中的進(jìn)程施加限制
5.2 將進(jìn)程放入作業(yè)中
5.3 終止作業(yè)中的所有線程查詢作業(yè)統(tǒng)計信息
5.4 作業(yè)通知
5.6 Job Lab示例程序
第6章 線程基礎(chǔ)
6.1 何時創(chuàng)建線程
6.2 何時不應(yīng)該創(chuàng)建線程
6.3 編寫第一個線程函數(shù)
6.4 CreateThread函數(shù)
6.4.1 psa參數(shù)
6.4.2 cbStackSize參數(shù)
6.4.3 pfnStartAddr和pvParam參數(shù)
6.4.4 dwCreateFlags
6.4.5 pdwThreadID7
6.5 終止運(yùn)行線程
6.5.1 線程函數(shù)返回
6.5.2 ExitThread函數(shù)
6.5.3 TerminateThread函數(shù)
6.5.4 進(jìn)程終止運(yùn)行時
6.5.5 線程終止運(yùn)行時
6.6 線程內(nèi)幕
6.7 C/C++運(yùn)行庫注意事項(xiàng)
6.7.1 用_beginthreadex而不要用CreateThread創(chuàng)建線程
6.7.2 絕對不應(yīng)該調(diào)用的C/C++運(yùn)行庫函數(shù)
6.8 了解自己的身份
6.8.1 將偽句柄轉(zhuǎn)換為真正的句柄
第7章 線程調(diào)度、優(yōu)先級和關(guān)聯(lián)性
7.1 線程的掛起和恢復(fù)
7.2 進(jìn)程的掛起和恢復(fù)
7.3 睡眠
7.4 切換到另一個線程
7.5 在超線程CPU上切換到另一個線程
7.6 線程的執(zhí)行時間
7.7 在實(shí)際上下文中談CONTEXT結(jié)構(gòu)
7.8 線程優(yōu)先級
7.9 從抽象角度看優(yōu)先級
7.10 優(yōu)先級編程
7.10.1 動態(tài)提升線程優(yōu)先級
7.10.2 為前臺進(jìn)程微調(diào)調(diào)度程序
7.10.3 調(diào)度I/O請求優(yōu)先級
7.10.4 Scheduling Lab 示例程序
7.11 關(guān)聯(lián)性
第8章 用戶模式下的線程同步
8.1 原子訪問:Interlocked系列函數(shù)
8.2 高速緩存行
8.3 高級線程同步需要避免使用的一種方法
8.4 關(guān)鍵段
8.4.1 關(guān)鍵段:細(xì)節(jié)
8.4.2 關(guān)鍵段和旋轉(zhuǎn)鎖
8.4.3 關(guān)鍵段和錯誤處理
8.5 Slim讀/寫鎖
8.6 條件變量
8.6.1 Queue示例程序
8.6.2 在停止線程時的死鎖問題
8.6.3 一些有用的竅門和技巧
第9章 用內(nèi)核對象進(jìn)行線程同步
9.1 等待函數(shù)
9.2 等待成功所引起的副作用
9.3 事件內(nèi)核對象
9.4 可等待的計時器內(nèi)核對象
9.4.1 讓可等待的計時器添加APC調(diào)用
9.4.2 計時器的剩余問題
9.5 信號量內(nèi)核對象
9.6 互斥量內(nèi)核對象
9.6.1 遺棄問題
9.6.2 互斥量與關(guān)鍵段的比較
9.6.3 Queue示例程序
9.7 線程同步對象速查表
9.8 其他的線程同步函數(shù)
9.8.1 異步設(shè)備I/O
9.8.2 WaitForInputIdle函數(shù)
9.8.3 MsgWaitForMultipleObjects(Ex)函數(shù)
9.8.4 WaitForDebugEvent函數(shù)
9.8.5 SignalObjectAndWait函數(shù)
9.8.6 使用等待鏈遍歷API來檢測死鎖
第10章 同步設(shè)備I/O與異步設(shè)備I/O
10.1 打開和關(guān)閉設(shè)備細(xì)看CreateFile函數(shù)
10.2 使用文件設(shè)備
10.2.1 取得文件的大小
10.2.2 設(shè)置文件指針的位置
10.2.3 設(shè)置文件尾
10.3 執(zhí)行同步設(shè)備I/O
10.3.1 將數(shù)據(jù)刷新至設(shè)備
10.3.2 同步I/O的取消
10.4 異步設(shè)備I/O基礎(chǔ)
10.4.1 OVERLAPPED結(jié)構(gòu)
10.4.2 異步設(shè)備I/O的注意事項(xiàng)
10.4.3 取消隊列中的設(shè)備I/O請求
10.5 接收I/O請求完成通知
10.5.1 觸發(fā)設(shè)備內(nèi)核對象
10.5.2 觸發(fā)事件內(nèi)核對象
10.5.3 可提醒I/O
10.5.4 I/O完成端口
10.5.5 模擬已完成的I/O請求
第11章 Windows線程池
11.1 情形1:以異步方式調(diào)用函數(shù)
11.1.1 顯式地控制工作項(xiàng)
11.1.2 Batch示例程序
11.2 情形2:每隔一段時間調(diào)用一個函數(shù)
11.3 情形3:在內(nèi)核對象觸發(fā)時調(diào)用一個函數(shù)
11.4 情形4:在異步I/O請求完成時調(diào)用一個函數(shù)
11.5 回調(diào)函數(shù)的終止操作
11.5.1 對線程池進(jìn)行定制
11.5.2 得體地銷毀線程池:清理組
第12章 纖程
第Ⅲ部分 內(nèi)存管理
第13章 Windows內(nèi)存體系結(jié)構(gòu)
13.1 進(jìn)程的虛擬地址空間
13.2 虛擬地址空間的分區(qū)
13.2.1 空指針賦值分區(qū)
13.2.2 用戶模式分區(qū)
13.3 地址空間中的區(qū)域
13.4 給區(qū)域調(diào)撥物理存儲器
13.5 物理存儲器和頁交換文件
13.6 頁面保護(hù)屬性
13.6.1 寫時復(fù)制
13.6.2 一些特殊的訪問保護(hù)屬性標(biāo)志
13.7 實(shí)例分析
13.8 數(shù)據(jù)對齊的重要性
第14章 探索虛擬內(nèi)存
14.1 系統(tǒng)信息
14.2 虛擬內(nèi)存狀態(tài)
14.3 NUMA機(jī)器中的內(nèi)存管理
14.4 確定地址空間的狀態(tài)
14.4.1 VMQuery函數(shù)
14.4.2 示例程序:虛擬內(nèi)存映射
第15章 在應(yīng)用程序中使用虛擬內(nèi)存
15.1 預(yù)訂地址空間區(qū)域
15.2 給區(qū)域調(diào)撥物理存儲器
15.3 同時預(yù)訂和調(diào)撥物理存儲器
15.4 何時調(diào)撥物理存儲器
15.5 撤銷調(diào)撥物理存儲器及釋放區(qū)
15.5.1 何時撤銷調(diào)撥物理存儲器
15.5.2 虛擬內(nèi)存分配示例程序
15.6 改變保護(hù)屬性
15.7 重置物理存儲器的內(nèi)容
15.8 地址窗口擴(kuò)展
第16章 線程棧
16.1 C/C++運(yùn)行庫的棧檢查函數(shù)
16.2 Summation示例程序
第17章 內(nèi)存映射文件
17.1 映射到內(nèi)存的可執(zhí)行文件和DLL
17.1.1 同一個可執(zhí)行文件或DLL的多個實(shí)例不會共享靜態(tài)數(shù)據(jù)
17.1.2 在同一個可執(zhí)行文件或DLL的多個實(shí)例間共享靜態(tài)數(shù)據(jù)
17.1.3 Application Instances示例程序
17.2 映射到內(nèi)存的數(shù)據(jù)文件
17.2.1 方法1:一個文件,一塊緩存
17.2.2 方法2:兩個文件,一塊緩存
17.2.3 方法3:一個文件,兩塊緩存
17.2.4 方法4:一個文件,零個緩存
17.3 使用內(nèi)存映射文件
17.3.1 第1步:創(chuàng)建或打開文件內(nèi)核對象
17.3.2 第2步:創(chuàng)建文件映射內(nèi)核對象
17.3.3 第3步:將文件的數(shù)據(jù)映射到進(jìn)程的地址空間
17.3.4 第4步:從進(jìn)程的地址空間撤銷對文件數(shù)據(jù)的映射
17.3.5 第5步和第6步:關(guān)閉文件映射對象和文件對象
17.6 File Reverse示例程序
17.7 用內(nèi)存映射文件來處理大文件
17.8 內(nèi)存映射文件和一致性
17.9 給內(nèi)存映射文件指定基地址
17.10 內(nèi)存映射文件的實(shí)現(xiàn)細(xì)節(jié)
第18章 堆
18.1 進(jìn)程的默認(rèn)堆
18.2 為什么要創(chuàng)建額外的堆
18.2.1 對組件進(jìn)行保護(hù)
18.2.2 更有效的內(nèi)存管理
18.2.3 使內(nèi)存訪問局部化
18.2.4 避免線程同步的開銷
18.2.5 快速釋放
18.3 如何創(chuàng)建額外的堆
18.3.1 從堆中分配內(nèi)存塊
18.3.2 調(diào)整內(nèi)存塊的大小
18.3.3 獲得內(nèi)存塊的大小
18.3.4 釋放內(nèi)存塊
18.3.5 銷毀堆
18.3.6 在C++中使用堆
18.4 其他堆函數(shù)
第Ⅳ部分 動態(tài)鏈接庫
第19章 DLL基礎(chǔ)
19.1 DLL和進(jìn)程的地址空間
19.2 縱觀全局
19.2.1 構(gòu)建DLL模塊
19.2.2 構(gòu)建可執(zhí)行模塊
19.2.3 運(yùn)行可執(zhí)行模塊
第20章 DLL高級技術(shù)
20.1 DLL模塊的顯式載入和符號鏈接
20.1.1 顯式地載入DLL模塊
20.1.2 顯式地卸載DLL模塊
20.1.3 顯式地鏈接到導(dǎo)出符號
20.2 DLL的入口點(diǎn)函數(shù)
20.2.1 DLL_PROCESS_ATTACH通知
20.2.2 DLL_PROCESS_DETACH通知
20.2.3 DLL_THREAD_ATTACH通知
20.2.4 DLL_THREAD_DETACH通知
20.2.5 DllMain的序列化調(diào)用
20.2.6 DllMain和C/C++運(yùn)行庫
20.3 延遲載入DLL
20.4 函數(shù)轉(zhuǎn)發(fā)器
20.5 已知的DLL
20.6 DLL重定向
20.7 模塊的基地址重定位
20.8 模塊的綁定
第21章 線程局部存儲區(qū)
21.1 動態(tài)TLS
21.2 靜態(tài)TLS0
第22章 DLL注入和API攔截
22.1 DLL注入的一個例子
22.2 使用注冊表來注入DLL
22.3 使用Windows掛鉤來注入DLL
22.4 使用遠(yuǎn)程線程來注入DLL
22.4.1 Inject Library示例程序
22.4.2 Image Walk DLL
22.5 使用木馬DLL來注入DLL
22.6 把DLL作為調(diào)試器來注入
22.7 使用CreateProcess來注入代碼
22.8 API攔截的一個例子9
22.8.1 通過覆蓋代碼來攔截API0
22.8.2 通過修改模塊的導(dǎo)入段來攔截API
22.8.3 Last MessageBox Info示例程序
第Ⅴ部分 結(jié)構(gòu)化異常處理
第23章 終止處理程序
第24章 異常處理程序與軟件異常
24.1 通過實(shí)例理解異常過濾程序和異常處理程序
24.1.1 Funcmeister1函數(shù)
24.1.2 Funcmeister2函數(shù)
24.2 EXCEPTION_EXECUTE_HANDLER1
24.2.1 一些有用的例子
24.2.2 全局展開
24.2.3 停止全局展開
24.3 EXCEPTION_CONTINUE_EXECUTION
24.4 EXCEPTION_CONTINUE_SEARCH0
24.5 GetExceptionCode2
24.6 GetExceptionInformation6
24.7 軟件異常
第25章 未處理異常、向量化異常處理與C++異常
25.1 UnhandledExceptionFilter函數(shù)詳解
25.2 即時調(diào)試
25.3 電子表格示例程序
25.4 向量化異常和繼續(xù)處理程序
25.5 C++異常與結(jié)構(gòu)化異常的比較
25.6 異常與調(diào)試器
第26章 錯誤報告與應(yīng)用程序恢復(fù)
26.1 Windows錯誤報告控制臺
26.2 可編程的Windows錯誤報告
26.3 對進(jìn)程中所有的問題報告進(jìn)行定制
26.4 問題報告的創(chuàng)建與定制
26.4.1 創(chuàng)建一個自定義的問題報告
26.4.2 設(shè)置報告參數(shù):WerReportSetParameter
26.4.3 將小型轉(zhuǎn)儲文件放入報告:WerReportAddDump8
26.4.4 將任意文件放入報告:WerReportAddFile9
26.4.5 修改對話框文本:WerReportSetUIOption0
26.4.6 提交錯誤報告:WerReportSubmit0
26.4.7 關(guān)閉問題報告:WerReportCloseHandle
26.4.8 Customized WER示例程序
26.5 應(yīng)用程序的自動重啟與恢復(fù)
26.5.1 應(yīng)用程序的自動重啟
26.5.2 對應(yīng)用程序恢復(fù)的支持
第Ⅵ部分
附錄A 構(gòu)建環(huán)境
附錄B 消息處理宏、子控件宏和API宏
索引
章節(jié)摘錄
插圖:第Ⅰ部分 必備知識第1章錯誤處理1.1定義自己的錯誤代碼1.2ErrorShow示例程序在深入討論MicrosoftWindows提供的諸多特性之前,應(yīng)該先理解各個Windows函數(shù)如何進(jìn)行錯誤處理的。調(diào)用Windows函數(shù)時,它會先驗(yàn)證我們傳給它們的參數(shù),然后再開始執(zhí)行任務(wù)。如果傳入的參數(shù)無效,或者由于其他原因?qū)е虏僮鳠o法執(zhí)行,則函數(shù)的返回值將指出函數(shù)因?yàn)槟承┰蚴×恕?/pre>媒體關(guān)注與評論
無論是Windows編程新手,還是完全用本機(jī)代碼來編程或通過P/Invoke來調(diào)用,NET Framework未提供的API的老手,都會發(fā)現(xiàn)《Windows核心編程》的價值。 ——Mark Russinovich,《深入解析Windows操作系統(tǒng)》作者 要想在Windows編程方面更上一層樓,遲早都需要好閱讀并領(lǐng)會《Windows核心編程》的內(nèi)容。 ——Francis Glassborow,C/C++用戶協(xié)會前主席 搞Windows程序設(shè)計有兩方面的資源是不可或缺的:一是MSDN,另一個便是《Windows核心編程》。 ——侯捷,著名技術(shù)作家編輯推薦
《Windows核心編程》是一本經(jīng)典的Windows核心編程指南,從第1版到第5版,引領(lǐng)著數(shù)十萬程序員走入Windows開發(fā)陣營,培養(yǎng)了大批精英。Windows核心編程(第5版)針對WindowsXP,WindowsVista和WindowsServer2008全面修訂。主題廣泛,內(nèi)容豐富,講解深入而精辟。透過這本W(wǎng)indows編程經(jīng)典,我們可以在專家的悉心指導(dǎo)下,洞悉Windows編程精華,深入了解高級編程技巧,編寫出高性能的Windows應(yīng)用程序。圖書封面
圖書標(biāo)簽Tags
無評論、評分、閱讀與下載
- 還沒讀過(50)
- 勉強(qiáng)可看(368)
- 一般般(628)
- 內(nèi)容豐富(2605)
- 強(qiáng)力推薦(213)