注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術計算機/網(wǎng)絡操作系統(tǒng)WindowsWindows核心編程(第5版)

Windows核心編程(第5版)

Windows核心編程(第5版)

定 價:¥99.00

作 者: (美)杰瑞夫(Jeffrey, J.),(法)克里斯托夫(Christophe, N.) 著;葛子昂,周靖,廖敏譯
出版社: 清華大學出版社
叢編項:
標 簽: WINDOWS

ISBN: 9787302184003 出版時間: 2008-09-01 包裝: 平裝
開本: 16 頁數(shù): 729 字數(shù):  

內(nèi)容簡介

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

作者簡介

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

圖書目錄



第1章 錯誤處理 3
1.1 定義自己的錯誤代碼 7
1.2 ErrorShow示例程序 7
第2章 字符和字符串處理 10
2.1 字符編碼 11
2.2 ANSI字符和Unicode字符
與字符串數(shù)據(jù)類型 12
2.3 Windows中的Unicode函數(shù)
和ANSI函數(shù) 14
2.4 C運行庫中的Unicode函數(shù)
和ANSI函數(shù) 16
2.5 C運行庫中的安全字符串函數(shù) 17
2.5.1 初識新的安全字符串函數(shù) 18
2.5.2 在處理字符串時如何獲得
更多控制 21
2.5.3 Windows字符串函數(shù) 23
2.6 為何要用Unicode 24
2.7 推薦的字符和字符串處理方式 25
2.8 Unicode與ANSI字符串轉換 26
2.8.1 導出ANSI和Unicode DLL
函數(shù) 28
2.8.2 判斷文本是ANSI還是
Unicode 29
第3章 內(nèi)核對象 32
3.1 何為內(nèi)核對象 32
3.1.1 使用計數(shù) 34
3.1.2 內(nèi)核對象的安全性 34
3.2 進程內(nèi)核對象句柄表 36
3.2.1 創(chuàng)建一個內(nèi)核對象 37
3.2.2 關閉內(nèi)核對象 38
3.3 跨進程邊界共享內(nèi)核對象 42
3.3.1 使用對象句柄繼承 42
3.3.2 改變句柄的標志 45
3.3.3 為對象命名 46
3.3.4 終端服務命名空間 50
3.3.5 專有命名空間 51
3.3.5 復制對象句柄 58

第II部分 工作機制

第4章 進程 65
4.1 編寫第一個Windows應用程序 66
4.1.1 進程實例句柄 71
4.1.2 進程前一個實例的句柄 72
4.1.3 進程的命令行 73
4.1.4 進程的環(huán)境變量 74
4.1.5 進程的關聯(lián)性 79
4.1.6 進程的錯誤模式 79
4.1.7 進程當前所在的驅動器
和目錄 80
4.1.8 進程的當前目錄 81
4.1.9 系統(tǒng)版本 82
4.2 CreateProcess函數(shù) 85
4.2.1 pszApplicationName
和pszCommandLine參數(shù) 86
4.2.2 psaProcess,psaThread
和bInheritHandles參數(shù) 87
4.2.3 fdwCreate參數(shù) 89
4.2.4 pvEnvironment參數(shù) 91
4.2.5 pszCurDir參數(shù) 92
4.2.6 psiStartInfo參數(shù) 92
4.2.7 ppiProcInfo參數(shù) 98
4.3 終止進程 100
4.3.1 主線程的入口點函數(shù)返回 100
4.3.2 ExitProcess函數(shù) 101
4.3.3 TerminateProcess函數(shù) 102
4.3.4 當進程中的所有線程終止時 103
4.3.5 當進程終止運行時 103
4.4 子進程 104
4.5 管理員以標準用戶權限運行時 106
4.5.1 自動提升進程的權限 109
4.5.2 手動提升進程的權限 111
4.5.3 何為當前權限上下文 112
4.5.4 枚舉系統(tǒng)中正在運行的
進程 114
4.5.5 Process Information示例
程序 115
第5章 作業(yè) 121
5.1 對作業(yè)中的進程施加限制 124
5.2 將進程放入作業(yè)中 131
5.3 終止作業(yè)中的所有線程 132
查詢作業(yè)統(tǒng)計信息 132
5.4 作業(yè)通知 135
5.6 Job Lab示例程序 138
第6章 線程基礎 140
6.1 何時創(chuàng)建線程 141
6.2 何時不應該創(chuàng)建線程 143
6.3 編寫第一個線程函數(shù) 144
6.4 CreateThread函數(shù) 144
6.4.1 psa參數(shù) 145
6.4.2 cbStackSize參數(shù) 145
6.4.3 pfnStartAddr和pvParam
參數(shù) 146
6.4.4 dwCreateFlags 147
6.4.5 pdwThreadID 147
6.5 終止運行線程 148
6.5.1 線程函數(shù)返回 148
6.5.2 ExitThread函數(shù) 148
6.5.3 TerminateThread函數(shù) 149
6.5.4 進程終止運行時 149
6.5.5 線程終止運行時 150
6.6 線程內(nèi)幕 150
6.7 C/C++運行庫注意事項 153
6.7.1 用_beginthreadex而不要用
CreateThread創(chuàng)建線程 161
6.7.2 絕對不應該調(diào)用的C/C++
運行庫函數(shù) 161
6.8 了解自己的身份 162
6.8.1 將偽句柄轉換為真正的
句柄 163
第7章 線程調(diào)度、優(yōu)先級和關聯(lián)性 165
7.1 線程的掛起和恢復 166
7.2 進程的掛起和恢復 167
7.3 睡眠 169
7.4 切換到另一個線程 169
7.5 在超線程CPU上切換到另一個
線程 170
7.6 線程的執(zhí)行時間 170
7.7 在實際上下文中談CONTEXT
結構 174
7.8 線程優(yōu)先級 178
7.9 從抽象角度看優(yōu)先級 179
7.10 優(yōu)先級編程 182
7.10.1 動態(tài)提升線程優(yōu)先級 185
7.10.2 為前臺進程微調(diào)調(diào)度程序 186
7.10.3 調(diào)度I/O請求優(yōu)先級 186
7.10.4 Scheduling Lab 示例程序 188
7.11 關聯(lián)性 192
第8章 用戶模式下的線程同步 197
8.1 原子訪問:Interlocked系列函數(shù) 198
8.2 高速緩存行 203
8.3 高級線程同步 205
需要避免使用的一種方法 205
8.4 關鍵段 207
8.4.1 關鍵段:細節(jié) 209
8.4.2 關鍵段和旋轉鎖 212
8.4.3 關鍵段和錯誤處理 213
8.5 Slim讀/寫鎖 214
8.6 條件變量 217
8.6.1 Queue示例程序 218
8.6.2 在停止線程時的死鎖問題 225
8.6.3 一些有用的竅門和技巧 227
第9章 用內(nèi)核對象進行線程同步 230
9.1 等待函數(shù) 232
9.2 等待成功所引起的副作用 235
9.3 事件內(nèi)核對象 236
Handshake示例程序 241
9.4 可等待的計時器內(nèi)核對象 245
9.4.1 讓可等待的計時器添加APC
調(diào)用 248
9.4.2 計時器的剩余問題 250
9.5 信號量內(nèi)核對象 251
9.6 互斥量內(nèi)核對象 253
9.6.1 遺棄問題 255
9.6.2 互斥量與關鍵段的比較 256
9.6.3 Queue示例程序 256
9.7 線程同步對象速查表 264
9.8 其他的線程同步函數(shù) 265
9.8.1 異步設備I/O 265
9.8.2 WaitForInputIdle函數(shù) 265
9.8.3 MsgWaitForMultipleObjects(Ex)
函數(shù) 266
9.8.4 WaitForDebugEvent函數(shù) 267
9.8.5 SignalObjectAndWait函數(shù) 267
9.8.6 使用等待鏈遍歷API來檢測
死鎖 268
第10章 同步設備I/O與異步設備I/O 275
10.1 打開和關閉設備 276
細看CreateFile函數(shù) 278
10.2 使用文件設備 285
10.2.1 取得文件的大小 285
10.2.2 設置文件指針的位置 286
10.2.3 設置文件尾 288
10.3 執(zhí)行同步設備I/O 289
10.3.1 將數(shù)據(jù)刷新至設備 289
10.3.2 同步I/O的取消 290
10.4 異步設備I/O基礎 291
10.4.1 OVERLAPPED結構 292
10.4.2 異步設備I/O的注意事項 294
10.4.3 取消隊列中的設備I/O
請求 296
10.5 接收I/O請求完成通知 296
10.5.1 觸發(fā)設備內(nèi)核對象 297
10.5.2 觸發(fā)事件內(nèi)核對象 298
10.5.3 可提醒I/O 301
10.5.4 I/O完成端口 306
10.5.5 模擬已完成的I/O請求 316
第11章 Windows線程池 324
11.1 情形1:以異步方式調(diào)用函數(shù) 325
11.1.1 顯式地控制工作項 325
11.1.2 Batch示例程序 327
11.2 情形2:每隔一段時間調(diào)用一個
函數(shù) 330
Timed Message Box示例程序 332
11.3 情形3:在內(nèi)核對象觸發(fā)時調(diào)用
一個函數(shù) 335
11.4 情形4:在異步I/O請求完成時
調(diào)用一個函數(shù) 337
11.5 回調(diào)函數(shù)的終止操作 339
11.5.1 對線程池進行定制 340
11.5.2 得體地銷毀線程池:
清理組 342
第12章 纖程 345
使用纖程 345
Counter示例程序 349


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

第13章 Windows內(nèi)存體系結構 355
13.1 進程的虛擬地址空間 355
13.2 虛擬地址空間的分區(qū) 356
13.2.1 空指針賦值分區(qū) 357
13.2.2 用戶模式分區(qū) 357
13.3 地址空間中的區(qū)域 360
13.4 給區(qū)域調(diào)撥物理存儲器 361
13.5 物理存儲器和頁交換文件 362
不在頁交換文件中維護的物理
存儲器 363
13.6 頁面保護屬性 365
13.6.1 寫時復制 366
13.6.2 一些特殊的訪問保護屬性
標志 367
13.7 實例分析 367
區(qū)域內(nèi)部 372
13.8 數(shù)據(jù)對齊的重要性 375
第14章 探索虛擬內(nèi)存 379
14.1 系統(tǒng)信息 379
系統(tǒng)信息示例程序 382
14.2 虛擬內(nèi)存狀態(tài) 387
14.3 NUMA機器中的內(nèi)存管理 388
示例程序:虛擬內(nèi)存狀態(tài) 389
14.4 確定地址空間的狀態(tài) 391
14.4.1 VMQuery函數(shù) 392
14.4.2 示例程序:虛擬內(nèi)存映射 397
第15章 在應用程序中使用虛擬內(nèi)存 400
15.1 預訂地址空間區(qū)域 400
15.2 給區(qū)域調(diào)撥物理存儲器 402
15.3 同時預訂和調(diào)撥物理存儲器 403
15.4 何時調(diào)撥物理存儲器 405
15.5 撤銷調(diào)撥物理存儲器及釋放區(qū)域 407
15.5.1 何時撤銷調(diào)撥物理存儲器 407
15.5.2 虛擬內(nèi)存分配示例程序 408
15.6 改變保護屬性 414
15.7 重置物理存儲器的內(nèi)容 415
MemReset示例程序 417
15.8 地址窗口擴展 419
AWE示例程序 422
第16章 線程棧 429
16.1 C/C++運行庫的棧檢查函數(shù) 433
16.2 Summation示例程序 435
第17章 內(nèi)存映射文件 440
17.1 映射到內(nèi)存的可執(zhí)行文件和DLL 441
17.1.1 同一個可執(zhí)行文件或DLL的
多個實例不會共享靜態(tài)
數(shù)據(jù) 442
17.1.2 在同一個可執(zhí)行文件或DLL
的多個實例間共享靜態(tài)
數(shù)據(jù) 444
17.1.3 Application Instances示例
程序 449
17.2 映射到內(nèi)存的數(shù)據(jù)文件 451
17.2.1 方法1:一個文件,一塊
緩存 451
17.2.2 方法2:兩個文件,一塊
緩存 452
17.2.3 方法3:一個文件,兩塊
緩存 452
17.2.4 方法4:一個文件,零個
緩存 453
17.3 使用內(nèi)存映射文件 453
17.3.1 第1步:創(chuàng)建或打開文件
內(nèi)核對象 454
17.3.2 第2步:創(chuàng)建文件映射
內(nèi)核對象 455
17.3.3 第3步:將文件的數(shù)據(jù)映射
到進程的地址空間 458
17.3.4 第4步:從進程的地址空間
撤銷對文件數(shù)據(jù)的映射 461
17.3.5 第5步和第6步:關閉文件
映射對象和文件對象 462
17.6 File Reverse示例程序 463
17.7 用內(nèi)存映射文件來處理大文件 469
17.8 內(nèi)存映射文件和一致性 470
17.9 給內(nèi)存映射文件指定基地址 471
17.10 內(nèi)存映射文件的實現(xiàn)細節(jié) 472
17.11 用內(nèi)存映射文件在進程間共享
數(shù)據(jù) 473
17.12 以頁交換文件為后備存儲器的
內(nèi)存映射文件 474
Memory-Mapped File Sharing示例
程序 475
17.13 稀疏調(diào)撥的內(nèi)存映射文件 478
Sparse Memory-Mapped File示例
程序 480
第18章 堆 491
18.1 進程的默認堆 491
18.2 為什么要創(chuàng)建額外的堆 492
18.2.1 對組件進行保護 493
18.2.2 更有效的內(nèi)存管理 493
18.2.3 使內(nèi)存訪問局部化 494
18.2.4 避免線程同步的開銷 494
18.2.5 快速釋放 495
18.3 如何創(chuàng)建額外的堆 495
18.3.1 從堆中分配內(nèi)存塊 497
18.3.2 調(diào)整內(nèi)存塊的大小 498
18.3.3 獲得內(nèi)存塊的大小 499
18.3.4 釋放內(nèi)存塊 500
18.3.5 銷毀堆 500
18.3.6 在C++中使用堆 500
18.4 其他堆函數(shù) 503

第IV部分 動態(tài)鏈接庫

第19章 DLL基礎 509
19.1 DLL和進程的地址空間 510
19.2 縱觀全局 512
19.2.1 構建DLL模塊 514
19.2.2 構建可執(zhí)行模塊 519
19.2.3 運行可執(zhí)行模塊 522
第20章 DLL高級技術 524
20.1 DLL模塊的顯式載入和符號鏈接 524
20.1.1 顯式地載入DLL模塊 525
20.1.2 顯式地卸載DLL模塊 529
20.1.3 顯式地鏈接到導出符號 532
20.2 DLL的入口點函數(shù) 533
20.2.1 DLL_PROCESS_ATTACH
通知 534
20.2.2 DLL_PROCESS_DETACH
通知 535
20.2.3 DLL_THREAD_ATTACH
通知 537
20.2.4 DLL_THREAD_DETACH
通知 538
20.2.5 DllMain的序列化調(diào)用 538
20.2.6 DllMain和C/C++運行庫 541
20.3 延遲載入DLL 542
DelayLoadApp示例程序 547
20.4 函數(shù)轉發(fā)器 553
20.5 已知的DLL 553
20.6 DLL重定向 555
20.7 模塊的基地址重定位 556
20.8 模塊的綁定 562
第21章 線程局部存儲區(qū) 565
21.1 動態(tài)TLS 566
使用動態(tài)TLS 568
21.2 靜態(tài)TLS 570
第22章 DLL注入和API攔截 572
22.1 DLL注入的一個例子 573
22.2 使用注冊表來注入DLL 575
22.3 使用Windows掛鉤來注入DLL 576
Desktop Item Position Saver(DIPS)
工具 578
22.4 使用遠程線程來注入DLL 587
22.4.1 Inject Library示例程序 591
22.4.2 Image Walk DLL 596
22.5 使用木馬DLL來注入DLL 598
22.6 把DLL作為調(diào)試器來注入 598
22.7 使用CreateProcess來注入
代碼 599
22.8 API攔截的一個例子 599
22.8.1 通過覆蓋代碼來攔截API 600
22.8.2 通過修改模塊的導入段來
攔截API 601
22.8.3 Last MessageBox Info示例
程序 604

第V部分 結構化異常處理

第23章 終止處理程序 621
通過實例理解終止處理程序 622
第24章 異常處理程序與軟件異常 638
24.1 通過實例理解異常過濾程序
和異常處理程序 638
24.1.1 Funcmeister1函數(shù) 639
24.1.2 Funcmeister2函數(shù) 639
24.2 EXCEPTION_EXECUTE_
HANDLER 641
24.2.1 一些有用的例子 642
24.2.2 全局展開 645
24.2.3 停止全局展開 647
24.3 EXCEPTION_CONTINUE_
EXECUTION 648
謹慎使用EXCEPTION_CONTINUE_
EXECUTION 649
24.4 EXCEPTION_CONTINUE_
SEARCH 650
24.5 GetExceptionCode 652
24.6 GetExceptionInformation 656
24.7 軟件異常 659
第25章 未處理異常、向量化異常處理
與C++異常 663
25.1 UnhandledExceptionFilter函數(shù)
詳解 665
25.2 即時調(diào)試 671
25.3 電子表格示例程序 673
25.4 向量化異常和繼續(xù)處理程序 681
25.5 C++異常與結構化異常的比較 683
25.6 異常與調(diào)試器 684
第26章 錯誤報告與應用程序恢復 688
26.1 Windows錯誤報告控制臺 688
26.2 可編程的Windows錯誤報告 691
26.3 對進程中所有的問題報告進行
定制 693
26.4 問題報告的創(chuàng)建與定制 694
26.4.1 創(chuàng)建一個自定義的問題
報告 697
26.4.2 設置報告參數(shù):
WerReportSetParameter 698
26.4.3 將小型轉儲文件放入報告:
WerReportAddDump 698
26.4.4 將任意文件放入報告:
WerReportAddFile 699
26.4.5 修改對話框文本:
WerReportSetUIOption 700
26.4.6 提交錯誤報告:
WerReportSubmit 700
26.4.7 關閉問題報告:
WerReportCloseHandle 702
26.4.8 Customized WER示例
程序 702
26.5 應用程序的自動重啟與恢復 708
26.5.1 應用程序的自動重啟 708
26.5.2 對應用程序恢復的支持 709



附錄A 構建環(huán)境 713
A.1 CmnHdr.h頭文件 713
A.1.1 Microsoft Windows Version
構建選項 713
A.1.2 Unicode構建選項 714
A.1.3 Windows Definitions與編譯
警告級別4 714
A.1.4 pragma message輔助宏 715
A.1.5 chINRANGE宏 715
A.1.6 chBEGINTHREADEX宏 715
A.1.7 適用于x86平臺的
對DebugBreak的改進 717
A.1.8 創(chuàng)建軟件異常碼 717
A.1.9 chMB宏 717
A.1.10 chASSERT宏
和chVERIFY宏 717
A.1.11 chHANDLE_DLGMSG宏 718
A.1.12 chSETDLGICONS宏 718
A.1.13 強制編譯器尋找 (w)WinMain
入口點函數(shù) 718
A.1.14 通過pragma預處理指令來支持
XP風格的用戶界面主題 718
附錄B 消息處理宏、子控件宏和API宏 724
B.1 消息處理宏 725
B.2 子控件宏 727
B.3 API宏 727
索引 729

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號