Windows 核心編程

Windows 核心編程

《Windows 核心編程》是2008年9月1日 清華大學出版社出版的圖書,作者是傑夫瑞 (Jeffrey Richter) (作者), 克里斯托夫 (Christophe Nasarre) (作者), 葛子昂 (譯者), 周靖 (譯者), 廖敏 (譯者)

基本介紹

  • 書名:Windows 核心編程
  • 作者傑夫瑞克里斯托夫
  • 譯者:葛子昂,周靖廖敏
  • ISBN:9787302184003
  • 頁數:770頁
  • 出版社:清華大學出版社
  • 出版時間:第1版 (2008年9月1日)
  • 裝幀:平裝
  • 開本:16
  • 叢書:微軟技術叢書
內容簡介,編輯推薦,媒體推薦,作者簡介,目錄,

內容簡介

《Windows核心編程(第5版)》是為打算理解Windows的C和C++程式設計師精心設計的,作為Windows開發人員的必備參考。第5版全面覆蓋WindowsXP,WindowsVista和WindowsServer2008中的170個新增函式和Windows特性。書中還講解了Windows系統如何使用這些特性,我們開發的應用程式又如何充分使用這些特性,如何自行創建新的特性。
《Windows核心編程(第5版)》重要主題:
如何為32位和64位Windows系統構建和實現應用程式;
如何新建和處理進程與作業;
如何調度.管理、同步和銷毀執行緒
如何通過I/O完成連線埠執行同步和異步設備I/O操作;
如何使用虛擬記憶體、記憶體映射檔案和堆之類的各種技術來分配記憶體;
如何處理默認調撥的執行緒棧物理存儲;
如何為延遲載入、API攔截和進程注入構建DLL;
如何使用結構化異常處理、Windows錯誤恢復和應用程式重啟等機制。
《微軟技術叢書》包括以下幾個子系列:
從入門到精通:適合新手程式設計師的實用教程;側重於基礎技術和特徵;提供範例檔案。
技術內幕:權威、必備的參考大全;包含豐富、實用的範例代碼;幫助讀者熟練掌握微軟體技術。
高級編程:側重於高級特性、技術和解決問題;包含豐富、適用性強的範例代碼;幫助讀者精通微軟技術。
精通&寶典:著重剖析套用技巧,以幫助提高工作效率;主題包括辦公套用和開發工具。
認證考試教材:完全根據考試要求來闡述每一個知識點;提供可供搜尋的Ebook(英文版)和訓練題;提供實際場景、案例分析和故障診斷實驗。

編輯推薦

《Windows核心編程》是一本經典的Windows核心編程指南,從第1版到第5版,引領著數十萬程式設計師走入Windows開發陣營,培養了大批精英。Windows核心編程(第5版)針對WindowsXP,WindowsVista和WindowsServer2008全面修訂。主題廣泛,內容豐富,講解深入而精闢。透過這本Windows編程經典,我們可以在專家的悉心指導下,洞悉Windows編程精華,深入了解高級編程技巧,編寫出高性能的Windows應用程式。

媒體推薦

無論是Windows編程新手,還是完全用本機代碼來編程或通過P/Invoke來調用,NET Framework未提供的API的老手,都會發現《Windows核心編程》的價值。
——Mark Russinovich,《深入解析Windows作業系統》作者
要想在Windows編程方面更上一層樓,遲早都需要好閱讀並領會《Windows核心編程》的內容。
——Francis Glassborow,C/C++用戶協會前主席
搞Windows程式設計有兩方面的資源是不可或缺的:一是MSDN,另一個便是《Windows核心編程》。
——侯捷,著名技術作家

作者簡介

JeffreyRichter是Wintellect公司的創始人之一,該公司從事培訓,調試和諮詢,致力於幫助其他公司以更快的速度開發出更優秀的軟體。他著作頗豐,代表作有暢銷書CLRviaC#。他還是MSDNMagazine的特約編輯和專欄作家。
ChristopheNasarre是BusinessObjicts的軟體架構師和開發部門領導,該公司致力於幫助其他企業更好地專注於其主營業務,通過商業智慧型方案來提升決策能力和業績。他為Aiddison-Wesley,APress和MicrosoftPress出版的許多圖書擔任過技術審校,。此外,他還是MSDNMagazine的撰稿人。
葛子昂,1998年畢業於南京理工大學計算機系,曾先後任職於上海育碧電腦軟體有限公司和上海旭上電子有限公司,從事遊戲軟體的開發及圖形處理器的設計。2005年加入微軟中國研發集團/伺服器與開發工具事業部至今,一直致力於WindowsCommunicationFoundation及相關領域的研發。代表譯著有《NET設計規範》。
周靖,1983年接觸蘋果機開始,“浸染”IT業數十年,涉獵廣泛,具有深厚的技術功底和良好的文學素養。早期痴迷於硬體,曾擔任《微型計算機》雜誌特約作者多年。繼而潛心鑽研編程,並樂在其中,積累了豐富的經驗。其翻譯風格嚴謹、準確、樸實、流暢,深受讀者歡迎。代表譯著有《c++面向對象程式設計》(國內銷量超過3萬冊)和《c#高級程式設計師指南》等。
廖敏,畢業於上海交通大學軟體學院並獲碩士學位,目前在微軟中國研發集團/伺服器與開發工具事業部擔任軟體設計工程師。

目錄

第1部分 必備知識
第1章 錯誤處理
1.1 定義自己的錯誤代碼
1.2 ErrorShow示例程式
第2章 字元和字元串處理
2.2 ANSI字元和Unicode字元與字元串數據類型
2.3 Windows中的Unicode函式和ANSI函式
2.4 C運行庫中的Unicode函式和ANSI函式
2.5 C運行庫中的安全字元串函式
2.5.1 初識新的安全字元串函式
2.5.2 在處理字元串時如何獲得更多控制
2.5.3 Windows字元串函式
2.6 為何要用Unicode
2.7 推薦的字元和字元串處理方式
2.8 Unicode與ANSI字元串轉換
2.8.1 導出ANSI和Unicode DLL函式
2.8.2 判斷文本是ANSI還是Unicode
第3章 核心對象
3.1 何為核心對象
3.1.1 使用計數
3.1.2 核心對象的安全性
3.2 進程核心對象句柄表
3.2.1 創建一個核心對象
3.2.2 關閉核心對象
3.3 跨進程邊界共享核心對象
3.3.1 使用對象句柄繼承
3.3.2 改變句柄的標誌
3.3.3 為對象命名
3.3.4 終端服務命名空間
3.3.5 專有命名空間
3.3.5 複製對象句柄
第Ⅱ部分 工作機制
第4章 進程
4.1 編寫第一個Windows應用程式
4.1.1 進程實例句柄
4.1.2 進程前一個實例的句柄
4.1.3 進程的命令行
4.1.4 進程的環境變數
4.1.5 進程的關聯性
4.1.6 進程的錯誤模式
4.1.7 進程當前所在的驅動器和目錄
4.1.8 進程的當前目錄
4.1.9 系統版本
4.2 CreateProcess函式
4.2.1 pszApplicationName和pszCommandLine參數
4.2.2 psaProcess,psaThread和bInheritHandles參數
4.2.3 fdwCreate參數
4.2.4 pvEnvironment參數
4.2.5 pszCurDir參數
4.2.6 psiStartInfo參數
4.2.7 ppiProcInfo參數
4.3 終止進程
4.3.1 主執行緒的入口點函式返回
4.3.2 ExitProcess函式
4.3.3 TerminateProcess函式
4.3.4 當進程中的所有執行緒終止時
4.3.5 當進程終止運行時
4.5 管理員以標準用戶許可權運行時
4.5.1 自動提升進程的許可權
4.5.2 手動提升進程的許可權
4.5.3 何為當前許可權上下文
4.5.4 枚舉系統中正在運行的進程
4.5.5 Process Information示例程式
第5章 作業
5.1 對作業中的進程施加限制
5.2 將進程放入作業中
5.3 終止作業中的所有執行緒查詢作業統計信息
5.4 作業通知
5.6 Job Lab示例程式
第6章 執行緒基礎
6.1 何時創建執行緒
6.2 何時不應該創建執行緒
6.3 編寫第一個執行緒函式
6.4 CreateThread函式
6.4.1 psa參數
6.4.2 cbStackSize參數
6.4.3 pfnStartAddr和pvParam參數
6.4.4 dwCreateFlags
6.4.5 pdwThreadID7
6.5 終止運行執行緒
6.5.1 執行緒函式返回
6.5.2 ExitThread函式
6.5.3 TerminateThread函式
6.5.4 進程終止運行時
6.5.5 執行緒終止運行時
6.6 執行緒內幕
6.7 C/C++運行庫注意事項
6.7.1 用_beginthreadex而不要用CreateThread創建執行緒
6.7.2 絕對不應該調用的C/C++運行庫函式
6.8 了解自己的身份
6.8.1 將偽句柄轉換為真正的句柄
第7章 執行緒調度優先權和關聯性
7.1 執行緒的掛起和恢復
7.2 進程的掛起和恢復
7.3 睡眠
7.4 切換到另一個執行緒
7.5 在超執行緒CPU上切換到另一個執行緒
7.6 執行緒的執行時間
7.7 在實際上下文中談CONTEXT結構
7.8 執行緒優先權
7.9 從抽象角度看優先權
7.10 優先權編程
7.10.1 動態提升執行緒優先權
7.10.2 為前台進程微調調度程式
7.10.3 調度I/O請求優先權
7.10.4 Scheduling Lab 示例程式
7.11 關聯性
第8章 用戶模式下的執行緒同步
8.1 原子訪問:Interlocked系列函式
8.2 高速快取行
8.3 高級執行緒同步需要避免使用的一種方法
8.4 關鍵段
8.4.1 關鍵段:細節
8.4.2 關鍵段和旋轉鎖
8.4.3 關鍵段和錯誤處理
8.5 Slim讀/寫鎖
8.6.1 Queue示例程式
8.6.2 在停止執行緒時的死鎖問題
8.6.3 一些有用的竅門和技巧
9.2 等待成功所引起的副作用
9.3 事件核心對象
9.4 可等待的計時器核心對象
9.4.1 讓可等待的計時器添加APC調用
9.4.2 計時器的剩餘問題
9.5 信號量核心對象
9.6 互斥量核心對象
9.6.1 遺棄問題
9.6.2 互斥量與關鍵段的比較
9.6.3 Queue示例程式
9.7 執行緒同步對象速查表
9.8 其他的執行緒同步函式
9.8.1 異步設備I/O
9.8.2 WaitForInputIdle函式
9.8.3 MsgWaitForMultipleObjects(Ex)函式
9.8.4 WaitForDebugEvent函式
9.8.5 SignalObjectAndWait函式
9.8.6 使用等待鏈遍歷API來檢測死鎖
第10章 同步設備I/O與異步設備I/O
10.1 打開和關閉設備細看CreateFile函式
10.2 使用檔案設備
10.2.1 取得檔案的大小
10.2.2 設定檔案指針的位置
10.2.3 設定檔案尾
10.3 執行同步設備I/O
10.3.1 將數據刷新至設備
10.3.2 同步I/O的取消
10.4 異步設備I/O基礎
10.4.1 OVERLAPPED結構
10.4.2 異步設備I/O的注意事項
10.4.3 取消佇列中的設備I/O請求
10.5 接收I/O請求完成通知
10.5.1 觸發設備核心對象
10.5.2 觸發事件核心對象
10.5.3 可提醒I/O
10.5.4 I/O完成連線埠
10.5.5 模擬已完成的I/O請求
第11章 Windows執行緒池
11.1 情形1:以異步方式調用函式
11.1.1 顯式地控制工作項
11.1.2 Batch示例程式
11.2 情形2:每隔一段時間調用一個函式
11.3 情形3:在核心對象觸發時調用一個函式
11.4 情形4:在異步I/O請求完成時調用一個函式
11.5 回調函式的終止操作
11.5.1 對執行緒池進行定製
11.5.2 得體地銷毀執行緒池:清理組
第12章 纖程
第Ⅲ部分 記憶體管理
第13章 Windows記憶體體系結構
13.1 進程的虛擬地址空間
13.2 虛擬地址空間的分區
13.2.1 空指針賦值分區
13.2.2 用戶模式分區
13.3 地址空間中的區域
13.4 給區域調撥物理存儲器
13.5 物理存儲器和頁交換檔案
13.6 頁面保護屬性
13.6.1 寫時複製
13.6.2 一些特殊的訪問保護屬性標誌
13.7 實例分析
13.8 數據對齊的重要性
第14章 探索虛擬記憶體
14.2 虛擬記憶體狀態
14.3 NUMA機器中的記憶體管理
14.4 確定地址空間的狀態
14.4.1 VMQuery函式
14.4.2 示例程式:虛擬記憶體映射
第15章 在應用程式中使用虛擬記憶體
15.1 預訂地址空間區域
15.2 給區域調撥物理存儲器
15.3 同時預訂和調撥物理存儲器
15.4 何時調撥物理存儲器
15.5 撤銷調撥物理存儲器及釋放區
15.5.1 何時撤銷調撥物理存儲器
15.5.2 虛擬記憶體分配示例程式
15.6 改變保護屬性
15.7 重置物理存儲器的內容
15.8 地址視窗擴展
第16章 執行緒棧
16.1 C/C++運行庫的棧檢查函式
16.2 Summation示例程式
第17章 記憶體映射檔案
17.1 映射到記憶體的執行檔和DLL
17.1.1 同一個執行檔或DLL的多個實例不會共享靜態數據
17.1.2 在同一個執行檔或DLL的多個實例間共享靜態數據
17.1.3 Application Instances示例程式
17.2 映射到記憶體的數據檔案
17.2.1 方法1:一個檔案,一塊快取
17.2.2 方法2:兩個檔案,一塊快取
17.2.3 方法3:一個檔案,兩塊快取
17.2.4 方法4:一個檔案,零個快取
17.3 使用記憶體映射檔案
17.3.1 第1步:創建或打開檔案核心對象
17.3.2 第2步:創建檔案映射核心對象
17.3.3 第3步:將檔案的數據映射到進程的地址空間
17.3.4 第4步:從進程的地址空間撤銷對檔案數據的映射
17.3.5 第5步和第6步:關閉檔案映射對象和檔案對象
17.6 File Reverse示例程式
17.7 用記憶體映射檔案來處理大檔案
17.8 記憶體映射檔案和一致性
17.9 給記憶體映射檔案指定基地址
17.10 記憶體映射檔案的實現細節
第18章 堆
18.1 進程的默認堆
18.2 為什麼要創建額外的堆
18.2.1 對組件進行保護
18.2.2 更有效的記憶體管理
18.2.3 使記憶體訪問局部化
18.2.4 避免執行緒同步的開銷
18.2.5 快速釋放
18.3 如何創建額外的堆
18.3.1 從堆中分配記憶體塊
18.3.2 調整記憶體塊的大小
18.3.3 獲得記憶體塊的大小
18.3.4 釋放記憶體塊
18.3.5 銷毀堆
18.3.6 在C++中使用堆
18.4 其他堆函式
第Ⅳ部分 動態程式庫
第19章 DLL基礎
19.1 DLL和進程的地址空間
19.2 縱觀全局
19.2.1 構建DLL模組
19.2.2 構建可執行模組
19.2.3 運行可執行模組
第20章 DLL高級技術
20.1 DLL模組的顯式載入和符號連結
20.1.1 顯式地載入DLL模組
20.1.2 顯式地卸載DLL模組
20.1.3 顯式地連結到導出符號
20.2 DLL的入口點函式
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的序列化調用
20.2.6 DllMain和C/C++運行庫
20.3 延遲載入DLL
20.4 函式轉發器
20.5 已知的DLL
20.6 DLL重定向
20.7 模組的基地址重定位
20.8 模組的綁定
21.1 動態TLS
21.2 靜態TLS0
第22章 DLL注入和API攔截
22.1 DLL注入的一個例子
22.2 使用註冊表來注入DLL
22.3 使用Windows掛鈎來注入DLL
22.4 使用遠程執行緒來注入DLL
22.4.1 Inject Library示例程式
22.4.2 Image Walk DLL
22.5 使用木馬DLL來注入DLL
22.6 把DLL作為調試器來注入
22.7 使用CreateProcess來注入代碼
22.8 API攔截的一個例子9
22.8.1 通過覆蓋代碼來攔截API0
22.8.2 通過修改模組的導入段來攔截API
22.8.3 Last MessageBox Info示例程式
第23章 終止處理程式
第24章 異常處理程式與軟體異常
24.1 通過實例理解異常過濾程式和異常處理程式
24.1.1 Funcmeister1函式
24.1.2 Funcmeister2函式
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函式詳解
25.2 即時調試
25.3 電子表格示例程式
25.4 向量化異常和繼續處理程式
25.5 C++異常與結構化異常的比較
25.6 異常與調試器
第26章 錯誤報告與應用程式恢復
26.1 Windows錯誤報告控制台
26.2 可程式的Windows錯誤報告
26.3 對進程中所有的問題報告進行定製
26.4 問題報告的創建與定製
26.4.1 創建一個自定義的問題報告
26.4.2 設定報告參數:WerReportSetParameter
26.4.3 將小型轉儲檔案放入報告:WerReportAddDump8
26.4.4 將任意檔案放入報告:WerReportAddFile9
26.4.5 修改對話框文本:WerReportSetUIOption0
26.4.6 提交錯誤報告:WerReportSubmit0
26.4.7 關閉問題報告:WerReportCloseHandle
26.4.8 Customized WER示例程式
26.5 應用程式的自動重啟與恢復
26.5.1 應用程式的自動重啟
26.5.2 對應用程式恢復的支持
第Ⅵ部分
附錄A 構建環境
附錄B 訊息處理宏、子控制項宏和API宏
索引

相關詞條

熱門詞條

聯絡我們