《Windows核心編程》是2008年5月機械工業(yè)出版社出版的圖書,作者是(美)Jeffrey Richter。本書從基本概念入手,全面系統(tǒng)地介紹了Windows底層實現(xiàn)機制、Windows應(yīng)用程序的基本構(gòu)件以及各類Windows API等,并列舉了大量應(yīng)用程序示例。.

中文名

Windows核心編程

開本

16

原版名稱

Windows Via C/C++

定價

85.1

語言

簡體中文

出版社

機械工業(yè)出版社

頁數(shù)

728

作者

(美)Jeffrey Richter

出版時間

2008年

裝幀

平裝

版次

第1版

譯者

黃隴

其他

膠版紙

ISBN

9787111237914

作者簡介

Windows核心編程

Jeffrey Richter是一位在全球享有盛譽的技術(shù)作家,尤其在Windows/.NET領(lǐng)域有著杰出的貢獻。他的第一本W(wǎng)indows著作Windows 3: A Developer's Guide大獲好評,從而聲名遠揚。之后,他又推出了經(jīng)典著作《Windows 高級編程指南》和《Windows核心編程》。如今這兩本書早已成為Windows程序設(shè)計領(lǐng)域的顛峰之作,培育了幾代軟件開發(fā)設(shè)計人員。他的每一本新作問世,我們都有理由相信這是一本巨著,我們想要的一切盡在其中。Jeffery 是Wintellect公司的創(chuàng)始人之一,也是MSDN雜志.NET專欄的特邀編輯。。因為他自1999年開始就參與了微軟.NET框架開發(fā)組的咨詢工作,與這些一線人員一起經(jīng)歷了.NET的孕育與誕生,所以他對.NET思想的領(lǐng)悟、對.NET的細節(jié)熟稔,是其他任何作家難以企及的。他是.NET著作領(lǐng)域中當之無愧的一面旗幟。

編輯推薦

亮點:長銷不衰的Windows編程經(jīng)典

權(quán)威力作 再度新鮮亮相

名著名譯 彰顯經(jīng)典魅力

深刻剖析底層實現(xiàn)機理

直擊Windows編程精髓

Windows核心編程(第5版)針對Windows XP,Windows Vista和Windows Server 2008全面修訂。主題廣泛,內(nèi)容豐富,講解深入而精辟。透過這本W(wǎng)indows編程經(jīng)典,我們可以在專家的悉心指導(dǎo)下,洞悉Windows編程精華,深入了解高級編程技巧,編寫出高性能的Windows應(yīng)用程序。

本書重要主題:

如何為32位和64位Windows系統(tǒng)構(gòu)建和實現(xiàn)應(yīng)用程序;

如何新建和處理進程與作業(yè);

如何調(diào)度.管理、同步和銷毀線程;

如何通過I/O完成端口執(zhí)行同步和異步設(shè)備I/O操作;

如何使用虛擬內(nèi)存、內(nèi)存映射文件和堆之類的各種技術(shù)來分配內(nèi)存;

如何處理默認調(diào)撥的線程棧物理存儲;

如何為延遲加載、API攔截和進程注入構(gòu)建DLL;

如何使用結(jié)構(gòu)化異常處理、Windows錯誤恢復(fù)和應(yīng)用程序重啟等機制。

《微軟技術(shù)叢書》包括以下幾個子系列:

從入門到精通:適合新手程序員的實用教程;側(cè)重于基礎(chǔ)技術(shù)和特征;提供范例文件。

技術(shù)內(nèi)幕:權(quán)威、必備的參考大全;包含豐富、實用的范例代碼;幫助讀者熟練掌握微軟件技術(shù)。

高級編程:側(cè)重于高級特性、技術(shù)和解決問題;包含豐富、適用性強的范例代碼;幫助讀者精通微軟技術(shù)。

精通&寶典:著重剖析應(yīng)用技巧,以幫助提高工作效率;主題包括辦公應(yīng)用和開發(fā)工具。

認證考試教材:完全根據(jù)考試要求來闡述每一個知識點;提供可供搜索的Ebook(英文版)和訓(xùn)練題;提供實際場景、案例分析和故障診斷實驗。

簡介

本書是講解Windows操作系統(tǒng)內(nèi)部機制的一本專著。作者從基本概念入手,全面系統(tǒng)地介紹了Windows底層實現(xiàn)機制、Windows應(yīng)用程序的基本構(gòu)件(包括進程、線程、內(nèi)存管理、動態(tài)鏈接庫、線程本地存儲和Unicode)以及各類Windows API等,并列舉了大量應(yīng)用程序示例,精辟地分析了Windows編程的各個難點和要點,為掌握Windows編程技巧提供了一條有效的捷徑。.

本書適合Windows編程人員參考。...

目錄

譯者序

前言

作譯者簡介

第一部分 程序員必讀

第1章 錯誤處理

1.1 自定義錯誤處理的實現(xiàn)

1.2 錯誤顯示例程

第2章 Unicode

2.1字符集

2.1.1 單字節(jié)和雙字節(jié)字符集

2.1.2 Unicode:寬字節(jié)字符集

2.2 為何需要Unicode

2.3 Windows 2000和Unicode

2.4 Windows 98和Unicode

2.5 Windows CE和Unicode

2.6 評論

2.7 關(guān)于COM

2.8 如何編寫Unicode源代碼

2.8.1 C運行庫的Unicode支持

2.8.2 Windows定義的Unicode數(shù)據(jù)類型

2.8.3 Windows系統(tǒng)中的Unicode函數(shù)和ANSI函數(shù)

2.8.4 Windows字符串函數(shù)

2.9 讓應(yīng)用程序符合ANSI和Unicode規(guī)范

2.9.1 Windows字符串函數(shù)

2.9.2 資源

2.9.3 確定文本是ANSI型還是Unicode型

2.9.4 在Unicode和ANSI間轉(zhuǎn)換字符串

第3章內(nèi)核對象

3.1內(nèi)核對象的概念

3.1.1 使用計數(shù)

3.1.2 安全性

3.2內(nèi)核對象句柄表

3.2.1 創(chuàng)建內(nèi)核對象

3.2.2 關(guān)閉內(nèi)核對象

3.3 進程間內(nèi)核對象的共享

3.3.1 對象句柄的繼承性

3.3.2 改變句柄標志

3.3.3 命名對象

3.3.4終端服務(wù)器命名空間

3.3.5 復(fù)制對象句柄

第二部分 完成編程任務(wù)

第4章 進程

4.1 編寫第一個Windows應(yīng)用程序

4.1.1 進程的實例句柄

4.1.2 進程的前一個實例句柄

4.1.3 進程的命令行

4.1.4 進程的環(huán)境變量

4.1.5 親緣性

4.1.6 進程的錯誤模式

4.1.7 當前驅(qū)動器和目錄

4.1.8當前目錄

4.1.9 系統(tǒng)版本

4.2 CreateProcess函數(shù)

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主線程的入口函數(shù)返回

4.3.2 ExitProcess函數(shù)

4.3.3 TerminateProcess函數(shù)

4.3.4 進程中所有線程的運行終止

4.3.5 進程的運行終止

4.4 子進程

4.5 枚舉系統(tǒng)中運行的進程

第5章 作業(yè)

5.1 對作業(yè)進程的限制

5.2 把進程放入作業(yè)

5.3 終止作業(yè)中所有進程的運行

5.4 查詢作業(yè)統(tǒng)計信息

5.5 作業(yè)通知信息

5.6 JobLab示例應(yīng)用程序

第6章 線程的基本知識

6.1 創(chuàng)建線程的時機

6.2 何時不能創(chuàng)建線程

6.3 編寫第一個線程函數(shù)

6.4 CreateThread函數(shù)

6.4.1 psa

6.4.2 cbStack

6.4.3 pfnStartAddr和pvParam

6.4.4 fdwCreate

6.4.5 pdwThreadID

6.5 終止線程

6.5.1 線程函數(shù)返回

6.5.2 ExitThread函數(shù)

6.5.3TerminateThread函數(shù)

6.5.4 在進程終止運行時終止線程

6.5.5 線程終止運行時發(fā)生的操作

6.6 線程的一些內(nèi)部細節(jié)

6.7 對于C/C++運行時庫的考慮

6.7.1 Oops—錯誤地調(diào)用了CreateThread

6.7.2 不該調(diào)用的C/C++運行時庫函數(shù)

6.8 線程的身份標識

第7章 線程的調(diào)度、優(yōu)先級和親緣性

7.1 掛起和恢復(fù)線程的運行

7.2 進程的掛起和喚醒

7.3 睡眠

7.4 線程切換

7.5 線程的運行時間

7.6 上下文環(huán)境切換

7.7 線程優(yōu)先級

7.8 優(yōu)先級的抽象說明

7.9 編程優(yōu)先級

7.9.1 動態(tài)提高線程的優(yōu)先級等級

7.9.2 為前臺進程調(diào)整調(diào)度程序

7.9.3 Scheduling Lab示例應(yīng)用程序

7.10 親緣性

第8章 用戶模式下的線程同步

8.1 原子訪問:互鎖函數(shù)族

8.2 高速緩存行

8.3 高級線程同步

8.4臨界區(qū)

8.4.1臨界區(qū)準確的描述

8.4.2臨界區(qū)與循環(huán)鎖

8.4.3臨界區(qū)與錯誤處理

8.4.4 有用的提示和技巧

第9章 線程與內(nèi)核對象的同步

9.1等待函數(shù)

9.2 成功等待的副作用

9.3 事件內(nèi)核對象

9.4 等待定時器內(nèi)核對象

9.4.1 用等待定時器給APC項排隊

9.4.2定時器的松散特性

9.5信號量內(nèi)核對象

9.6 互斥內(nèi)核對象

9.6.1 釋放問題

9.6.2互斥對象與臨界區(qū)的比較

9.6.3 Queue應(yīng)用程序示例

9.7線程同步對象表

9.8 其他線程同步函數(shù)

9.8.1 異步設(shè)備I/O

9.8.2WaitForInputIdle

9.8.3 MsgWaitForMultipleObjects(Ex)

9.8.4 WaitForDebugEvent

9.8.5SignalObjectAndWait

第10章線程同步工具包

10.1臨界區(qū)的實現(xiàn):Optex

10.2 創(chuàng)建線程安全的數(shù)據(jù)類型和反信號量

10.3 單寫入多讀出程序的保護

10.4 WaitForMultipleExpressions函數(shù)的實現(xiàn)

第11章線程池

11.1 場景1:異步調(diào)用函數(shù)

11.2 場景2:按規(guī)定的時間間隔調(diào)用函數(shù)

11.3 場景3:在某個內(nèi)核對象變?yōu)橐淹ㄖ獱顟B(tài)時調(diào)用函數(shù)

11.4 場景4:異步I/O請求運行完成時調(diào)用函數(shù)

第12章纖程

12.1 使用纖程

12.2 Counter示例應(yīng)用程序

第三部分內(nèi)存管理

第13章 Windows內(nèi)存結(jié)構(gòu)

13.1 進程的虛擬地址空間

13.2 虛擬地址空間分區(qū)

13.2.1 無效斷點分配分區(qū)(適于Windows 2000和Windows 98)

13.2.2MS-DOS/16位Windows應(yīng)用程序兼容分區(qū)(僅適于Windows 98)

13.2.3 用戶模式分區(qū)(適用Windows 2000和Windows 98)

13.2.4 64KB禁止進入分區(qū)(僅適用于Windows 2000)

13.2.5 共享的MMF分區(qū)(僅適用于Windows 98)

13.2.6 內(nèi)核模式分區(qū)(使用于Windows 2000和Windows 98)

13.3地址空間區(qū)域

13.4 在地址空間區(qū)域中提交物理存儲器

13.5 物理存儲器和頁面文件

13.6 保護屬性

13.6.1 Copy-On-Write訪問

13.6.2 特殊訪問保護屬性標志

13.7 綜合使用所有元素

13.7.1 區(qū)域的內(nèi)部詳情

13.7.2 Windows 98上地址空間的差異

13.8 數(shù)據(jù)對齊的重要性

第14章虛擬內(nèi)存

14.1系統(tǒng)信息

14.2虛擬內(nèi)存的狀態(tài)

14.3 確定地址空間狀態(tài)

14.3.1 VMQery函數(shù)

14.3.2虛擬內(nèi)存表應(yīng)用程序示例

第15章應(yīng)用程序中虛擬內(nèi)存的使用

15.1地址空間中保留區(qū)域

15.2 在保留區(qū)域中提交存儲器

15.3 同時進行保留區(qū)域并提交內(nèi)存

15.4 何時提交物理存儲器

15.5 物理存儲器的回收和地址空間區(qū)域的釋放

15.5.1 何時回收物理存儲器

15.5.2虛擬內(nèi)存分配示例應(yīng)用程序

15.6 改變保護屬性

15.7 清除物理存儲器內(nèi)容

15.8 地址窗口擴展(僅使用于Windows 2000)

第16章 線程棧

16.1 Windows 98下的線程棧

16.2 C/C++運行時庫中的棧檢測函數(shù)

16.3 Summation示例應(yīng)用程序

第17章內(nèi)存映射文件

17.1 內(nèi)存映射的可執(zhí)行文件和DLL文件

17.1.1可執(zhí)行文件或DLL的多個實例之間無法共享的靜態(tài)數(shù)據(jù)

17.1.2 在可執(zhí)行文件或DLL的多個實例之間共享靜態(tài)數(shù)據(jù)

17.1.3 AppInst示例應(yīng)用程序

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ù)映射到進程地址空間

17.3.4 步驟4:進程地址空間中撤銷文件數(shù)據(jù)的映像

17.3.5 步驟5和步驟6:關(guān)閉文件映射對象和文件對象

17.3.6 文件倒序示例應(yīng)用程序

17.4 使用內(nèi)存映射文件處理大文件

17.5內(nèi)存映射文件的一致性

17.6 設(shè)定內(nèi)存映射文件的基地址

17.7 實現(xiàn)內(nèi)存映射文件的具體細節(jié)

17.8 使用內(nèi)存映射文件在進程之間實現(xiàn)數(shù)據(jù)共享

17.9 受頁面文件支持的內(nèi)存映射文件

17.10 稀疏提交的內(nèi)存映射文件

第18章 堆

18.1 進程的默認堆

18.2 創(chuàng)建輔助堆的原因

18.2.1 保護組件

18.2.2 更有效地管理內(nèi)存

18.2.3 進行本地訪問

18.2.4 減少線程同步開銷

18.2.5 快速釋放

18.3 創(chuàng)建輔助堆的方法

18.3.1 分配堆中的內(nèi)存塊

18.3.2 改變內(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與進程的地址空間

19.2 DLL的總體運行情況

19.3 創(chuàng)建DLL模塊

19.3.1 導(dǎo)出的真正含義

19.3.2 使用非Visual C++工具創(chuàng)建DLL

19.4 創(chuàng)建可執(zhí)行模塊

19.5 運行可執(zhí)行模塊

第20章 DLL高級技術(shù)

20.1 顯式加載DLL模塊和符號鏈接

20.1.1 顯式加載DLL模塊

20.1.2 顯式卸載DLL模塊

20.1.3 顯式鏈接到導(dǎo)出符號

20.2 DLL的入口函數(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順序調(diào)用DllMain

20.2.6 DllMain和C/C++運行時庫

20.3延遲加載DLL

20.4 函數(shù)轉(zhuǎn)發(fā)器

20.5 已知的DLL

20.6 DLL重定向

20.7 模塊的基址重置

20.8 綁定模塊

第21章 線程本地存儲

21.1 動態(tài)TLS

21.2 靜態(tài)TLS

第22章 DLL注入以及API掛接

22.1 DLL注入:一個例子

22.2 使用注冊表注入DLL

22.3 使用Windows鉤子注入DLL

22.4 使用遠程線程注入DLL

22.4.1 Inject Library示例應(yīng)用程序

22.4.2 Image Walk DLL

22.5 使用特洛伊DLL注入DLL

22.6 將DLL作為調(diào)試程序注入

22.7 在Windows 98平臺上使用內(nèi)存映射文件注入代碼

22.8 使用CreateProcess來注入代碼

22.9 API掛接:一個例子

22.9.1 通過覆寫代碼實現(xiàn)API掛接

22.9.2 通過操作模塊的導(dǎo)入部分來實現(xiàn)API掛接

22.9.3 LastMsgBoxInfo示例應(yīng)用程序

第五部分結(jié)構(gòu)化異常處理

第23章 終止處理例程

23.1 Funcenstein1

23.2 Funcenstein2

23.3 Funcenstein3

23.4 Funcfurter1

23.5 小測驗:FuncaDoodleDoo

23.6 Funcenstein4

23.7 Funcarama1

23.8 Funcarama2

23.9 Funcarama3

23.10 Funcarama4:最終的邊界

23.11 有關(guān)finally塊的說明

23.12 Funcfurter2

23.13 SEH終止示例應(yīng)用程序

第24章 異常處理程序和軟件異常

24.1 通過例子理解異常過濾器和異常處理程序

24.1.1 Funcmeister1

24.1.2 Funcmeister2

24.2 EXCEPTION_EXECUTE_HANDLER

24.2.1 一些有用的例子

24.2.2 全局展開

24.2.3 暫停全局展開

24.3 EXCEPTION_CONTINUE_EXECUTION

24.4 EXCEPTION_CONTINUE_SEARCH

24.5GetExceptionCode

24.5.1 與內(nèi)存相關(guān)的異常

24.5.2 與異常相關(guān)的異常

24.5.3 與調(diào)試相關(guān)的異常

24.5.4 與整數(shù)相關(guān)的異常

24.5.5 與浮點數(shù)相關(guān)的異常

24.6 GetExceptionInformation

24.7軟件異常

第25章 未處理異常和C++異常

25.1 即時調(diào)試

25.2 關(guān)閉異常消息框

25.2.1 強制進程終止運行

25.2.2 包裝一個線程函數(shù)

25.2.3 包裝所有的線程函數(shù)

25.2.4 自動調(diào)用調(diào)試器

25.3 自己調(diào)用UnhandledExceptionFilter

25.4 UnhandledExceptionFilter函數(shù)的內(nèi)部細節(jié)

25.5 異常和調(diào)試程序

25.6 C++異常與結(jié)構(gòu)化異常比較

第六部分 窗口

第26章 窗口消息

26.1 線程的消息隊列

26.2 將消息投送到一個線程的消息隊列中

26.3 向窗口發(fā)送消息

26.4 喚醒一個線程

26.4.1 隊列狀態(tài)標志

26.4.2 從線程隊列中提取消息的算法

26.4.3 使用內(nèi)核對象或者隊列狀態(tài)標志來喚醒一個線程

26.5 使用消息發(fā)送數(shù)據(jù)

26.6 Windows處理ANSI/Unicode字符和字符串的方法

第27章 硬件輸入模型與本地輸入狀態(tài)

27.1 原始輸入線程

27.2 本地輸入狀態(tài)

27.2.1 鍵盤輸入和焦點

27.2.2 鼠標光標管理

27.3 將虛擬輸入隊列和本地輸入狀態(tài)相關(guān)聯(lián)

27.3.1 LISLab示例應(yīng)用程序

27.3.2 LISWatch示例應(yīng)用程序

附錄

附錄A 構(gòu)建環(huán)境

附錄B 消息解析器、子控件宏以及API宏