Windows 核心編程, 5/e (中文限量版)
[美]傑弗里·李希特 (Jeffrey Richter) [法]克裡斯托弗·納薩雷(Christophe Nasarre)著 周靖 譯
買這商品的人也買了...
-
$500$425 -
$1,710The C Programming Language, 2/e (IE-Paprback)
-
$8663D 遊戲編程大師技巧(上+下冊) (Tricks of the 3D Game Programming Gurus-Advanced 3D Graphics and Rasterization)
-
$520$406 -
$594$564 -
$505解密 Photoshop Lightroom 數碼照片後期處理專業技法
-
$888$844 -
$990$782 -
$380$342 -
$380$251 -
$550$429 -
$380$342 -
$479$455 -
$611深入淺出 Windows API 程序設計:編程基礎篇
-
$764深入淺出 Windows API 程序設計:核心編程篇
-
$407瘋狂造物 -- Blender 創意設計與 3D打印
-
$880$695 -
$490虛擬現實游戲開發(Unreal Engine)
-
$888$844 -
$630$498 -
$708$673 -
$594$564 -
$1,014$963 -
$713深入理解FFmpeg (限量簽名版)
-
$774$735
相關主題
商品描述
《Windows核心編程(第5版 中文限量版)》是一本經典的Windows核心編程指南,從第1版到第5版,引領著數十萬程序員走入Windows開發陣營,培養了大批精英。 作為Windows開發人員的必備參考,《Windows核心編程(第5版 中文限量版)》是為打算理解Windows的C和C++程序員精心設計的。第5版全面覆蓋Windows XP,Windows Vista和Windows Server 2008中的170個新增函數和Windows特性。書中還講解了Windows系統如何使用這些特性,我們開發的應用程序又如何充分使用這些特性,如何自行創建新的特性。
目錄大綱
簡明目錄
第I 部分 必 備 知 識
第1 章 錯誤處理 3
第2 章 字符和字符串處理 11
第3 章 內核對象 35
第II 部分 工 作 機 理
第4 章 進程 75
第5 章 作業 139
第6 章 線程基礎 161
第7 章 線程調度、優先級和親和性 191
第8 章 用戶模式下的線程同步 231
第9 章 用內核對象進行線程同步 271
第10 章 同步和異步設備I/O 325
第11 章 Windows 線程池 381
第12 章 纖程 407
第III 部分 內 存 管 理
第13 章 Windows 內存架構 417
第14 章 探索虛擬內存 443
第15 章 在應用程序中使用虛擬內存 469
第16 章 線程棧 505
第17 章 內存映射文件 519
第18 章 堆 581
第IV 部分 動態鏈接庫
第19 章 DLL 基礎 601
第20 章DLL 高級技術 619
第21 章 線程局部存儲 667
第22 章 DLL 註入和API 攔截 675
第V 部分 結構化異常處理
第23 章 終止處理程序 739
第24 章 異常處理程序與軟件異常 761
第25 章 未處理異常、向量化異常處理與C++ 異常 791
第26 章 錯誤報告與應用程序恢復 821
附 錄
附錄A 生成環境 851
附錄B 消息處理宏、子控件宏和API 宏 865
索引 871
詳細目錄
第I 部分 必 備 知 識
第1 章 錯誤處理 3
1.1 定義自己的錯誤碼 7
1.2 ErrorShow 示例程序 8
第2 章 字符和字符串處理 11
2.1 字符編碼 12
2.2 ANSI 字符和Unicode 字符與字符串數據類型 14
2.3 Windows 中的Unicode 和ANSI 函數 16
2.4 C 運行庫中的Unicode 函數和ANSI 函數 19
2.5 C 運行庫中的安全字符串函數 19
2.4.1 初識新的安全字符串函數 20
2.4.2 字符串處理時如何獲得更多控制 24
2.4.3 Windows 字符串函數 26
2.6 為何要用Unicode 27
2.7 推薦的字符和字符串處理方式 28
2.8 Unicode 與ANSI 字符串轉換 29
2.8.1 導出ANSI 和Unicode DLL 函數 31
2.8.2 判斷文本是ANSI 還是Unicode 33
第3 章 內核對象 35
3.1 何為內核對象 35
3.1.1 使用計數 37
3.1.2 安全性 37
3.2 進程的內核對象句柄表 40
3.2.1 創建內核對象 41
3.2.2 關閉內核對象 43
3.3 跨進程邊界共享內核對象 46
3.3.1 使用對象句柄繼承 46
3.3.2 改變句柄的標志 50
3.3.3 為對象命名 51
3.3.4 終端服務命名空間 56
3.3.5 專有命名空間 57
3.3.6 復制對象句柄 66
第II 部分 工 作 機 理
第4 章 進程 75
4.1 編寫第一個Windows 應用程序 76
4.1.1 進程實例句柄 81
4.1.2 進程前一個實例的句柄 84
4.1.3 進程的命令行 84
4.1.4 進程的環境變量 86
4.1.5 進程的親和性 92
4.1.6 進程的錯誤模式 92
4.1.7 進程當前所在的驅動器和目錄 93
4.1.8 進程的當前目錄 94
4.1.9 系統版本 95
4.2 CreateProcess 函數 99
4.2.1 pszApplicationName 參數和pszCommandLine 參數 99
4.2.2 參數psaProcess,psaThread 和bInheritHandles 101
4.2.3 fdwCreate 參數 104
4.2.4 pvEnvironment 參數 106
4.2.5 pszCurDir 參數 106
4.2.6 psiStartInfo 參數 106
4.2.7 ppiProcInfo 參數 113
4.3 終止進程 116
4.3.1 主線程的入口點函數返回 116
4.3.2 ExitProcess 函數 116
4.3.3 TerminateProcess 函數 118
4.3.4 當進程中的所有線程終止時 119
4.3.5 當進程終止運行時 119
4.4 子進程 120
4.5 管理員以標準用戶權限運行 122
4.5.1 自動提升進程權限 126
4.5.2 手動提升進程權限 127
4.5.3 何為當前權限上下文 129
4.5.4 枚舉系統中正在運行的進程 131
4.5.5 Process Information 示例程序 132
第5 章 作業 139
5.1 對作業中的進程施加限制 144
5.2 將進程放入作業中 151
5.3 終止作業中的所有線程 152
5.4 作業通知 156
5.5 Job Lab 示例程序 158
第6 章 線程基礎 161
6.1 何時創建線程 162
6.2 何時不應該創建線程 164
6.3 編寫第一個線程函數 165
6.4 CreateThread 函數 166
6.4.1 psa 參數 167
6.4.2 cbStackSize 參數 167
6.4.3 pfnStartAddr 參數和pvParam 參數 168
6.4.4 dwCreateFlags 參數 169
6.4.5 pdwThreadID 參數 169
6.5 終止運行線程 170
6.5.1 線程函數返回 170
6.5.2 ExitThread 函數 170
6.5.3 TerminateThread 函數 171
6.5.4 進程終止運行時 171
6.5.5 線程終止運行時 172
6.6 線程內幕 173
6.7 C/C++ 運行庫註意事項 175
6.7.1 用_beginthreadex 而不要用CreateThread 創建線程 185
6.7.2 絕對不應該調用的C/C++ 運行庫函數 186
6.8 瞭解自己的身份 187
第7 章 線程調度、優先級和親和性 191
7.1 線程的掛起和恢復 193
7.2 進程的掛起和恢復 194
7.3 睡眠 196
7.4 切換到另一個線程 196
7.5 在超線程CPU 上切換到另一個線程 197
7.6 線程的執行時間 197
7.7 在實際上下文中談CONTEXT 結構 202
7.8 線程優先級 207
7.9 從抽象角度看優先級 208
7.10 優先級編程 211
7.10.1 動態提升線程優先級 214
7.10.2 為前臺進程調整調度程序 216
7.10.3 調度I/O 請求優先級 216
7.10.4 Scheduling Lab 示例程序 218
7.11 親和性 224
第8 章 用戶模式下的線程同步 231
8.1 原子訪問:Interlocked 系列函數 232
8.2 高速緩存行 239
8.3 高級線程同步 241
8.4 關鍵段 243
8.4.1 關鍵段:細節 246
8.4.2 關鍵段和自旋鎖 249
8.4.3 關鍵段和錯誤處理 250
8.5 Slim 讀/ 寫鎖 251
8.6 條件變量 254
8.6.1 Queue 示例程序 255
8.6.2 停止線程時的死鎖問題 265
8.6.3 一些有用的技巧和技術 267
第9 章 用內核對象進行線程同步 271
9.1 等待函數 274
9.2 等待成功所引起的副作用 276
9.3 事件內核對象 278
9.4 可等待的計時器內核對象 289
9.4.1 讓可等待的計時器入隊APC 調用 293
9.4.2 計時器未盡事宜 295
9.5 信號量內核對象 296
9.6 互斥量內核對象 299
9.6.1 遺棄問題 301
9.6.2 互斥量與關鍵段的比較 302
9.6.3 Queue 示例程序 302
9.7 線程同步對象速查表 312
9.8 其他線程同步函數 313
9.8.1 異步設備I/O 313
9.8.2 WaitForInputIdle 函數 314
9.8.3 MsgWaitForMultipleObjects(Ex) 函數 315
9.8.4 WaitForDebugEvent 函數 315
9.8.5 SignalObjectAndWait 函數 316
9.8.6 使用等待鏈遍歷API 來檢測死鎖 317
第10 章 同步和異步設備I/O 325
10.1 打開和關閉設備 326
10.2 使用文件設備 335
10.2.1 取得文件的大小 335
10.2.2 定位文件指針 337
10.2.3 設置文件尾 339
10.3 執行同步設備I/O 339
10.3.1 將數據回寫到設備 340
10.3.2 同步I/O 取消 340
10.4 異步設備I/O 基礎 342
10.4.1 OVERLAPPED 結構 343
10.4.2 異步設備I/O 的註意事項 345
10.4.3 取消隊列中的設備I/O 請求 347
10.5 接收I/O 請求完成通知 348
10.5.1 觸發設備內核對象 348
10.5.2 觸發事件內核對象 350
10.5.3 可提醒I/O 353
10.5.4 I/O 完成埠 359
10.5.5 模擬已完成的I/O 請求 371
第11 章 Windows 線程池 381
11.1 情形1:異步調用函數 382
11.1.1 顯式控制工作項 383
11.1.2 Batch 示例程序 385
11.2 情形2:定時調用函數 389
11.3 情形3:在內核對象觸發時調用函數 395
11.4 情形4:在異步I/O 請求完成時調用函數 397
11.5 回調函數的終止操作 399
11.5.1 對線程池進行定製 400
11.5.2 得體地銷毀線程池:清理組 403
第12 章 纖程 407
第III 部分 內 存 管 理
第13 章 Windows 內存架構 417
13.1 進程的虛擬地址空間 417
13.2 虛擬地址空間的分區 418
13.2.1 空指針賦值分區 419
13.2.2 用戶模式分區 419
13.3 地址空間中的區域 422
13.4 為區域調撥物理存儲 423
13.5 物理存儲和分頁文件 424
13.6 頁面保護屬性 428
13.6.1 寫時復制 429
13.6.2 一些特殊的訪問保護屬性標志 430
13.7 實例分析 430
13.8 數據對齊的重要性 438
第14 章 探索虛擬內存 443
14.1 系統信息 443
14.2 虛擬內存狀態 453
14.3 NUMA 機器中的內存管理 455
14.4 確定地址空間的狀態 458
14.4.1 VMQuery 函數 460
14.4.2 示例程序:虛擬內存映射 466
第15 章 在應用程序中使用虛擬內存 469
15.1 預訂地址空間區域 470
15.2 為預訂的區域調撥物理存儲 472
15.3 同時預訂和調撥物理存儲 473
15.4 何時調撥物理存儲 474
15.5 撤銷調撥物理存儲並釋放區域 476
15.5.1 何時撤銷調撥物理存儲 477
15.5.2 虛擬內存分配示例程序 478
15.6 更改保護屬性 487
15.7 重置物理存儲的內容 488
15.8 地址窗口擴展 492
第16 章 線程棧 505
16.1 C/C++ 運行庫的棧檢查函數 510
16.2 Summation 示例程序 512
第17 章 內存映射文件 519
17.1 映射到內存的可執行文件和DLL 520
17.1.1 同一個可執行文件或DLL 的多個實例不會共享靜態數據 521
17.1.2 在同一個可執行文件或DLL 的多個實例間共享靜態數據 523
17.1.3 Application Instances 示例程序 529
17.2 映射到內存的數據文件 533
17.2.1 方法1:一個文件,一個緩沖區 533
17.2.2 方法2:兩個文件,一個緩沖區 534
17.2.3 方法3:一個文件,兩個緩沖區 534
17.2.4 方法4:一個文件,零個緩沖區 534
17.3 使用內存映射文件 535
17.3.1 第1 步:創建或打開文件內核對象 535
17.3.2 第2 步:創建文件映射內核對象 536
17.3.3 第3 步:將文件的數據映射到進程的地址空間 540
17.3.4 第4 步:從進程的地址空間撤銷對文件數據的映射 543
17.3.5 第5 步和第6 步:關閉文件映射對象和文件對象 545
17.3.6 File Reverse 示例程序 546
17.4 用內存映射文件處理大文件 553
17.5 內存映射文件和一致性 555
17.6 為內存映射文件指定基地址 556
17.7 內存映射文件的實現細節 557
17.8 用內存映射文件在進程間共享數據 558
17.9 以分頁文件作為後備存儲的內存映射文件 559
17.10 稀疏調撥的內存映射文件 565
第18 章 堆 581
18.1 進程的默認堆 582
18.2 為什麽要創建額外的堆 583
18.2.1 對組件進行保護 583
18.2.2 更高效的內存管理 584
18.2.3 局部訪問 584
18.2.4 避免線程同步的開銷 585
18.2.5 快速釋放 585
18.3 如何創建額外的堆 585
18.3.1 從堆中分配內存塊 588
18.3.2 調整內存塊的大小 589
18.3.3 獲得內存塊的大小 590
18.3.4 釋放內存塊 590
18.3.5 銷毀堆 591
18.3.6 在C++ 中使用堆 591
18.4 其他堆函數 594
第IV 部分 動態鏈接庫
第19 章 DLL 基礎 601
19.1 DLL 和進程的地址空間 602
19.2 縱觀全局 605
19.2.1 生成DLL 模塊 607
19.2.2 生成可執行模塊 613
19.2.3 運行可執行模塊 616
第20 章 DLL 高級技術 619
20.1 DLL 模塊的顯式加載和符號鏈接 619
20.1.1 顯式加載DLL 模塊 621
20.1.2 顯式卸載DLL 模塊 624
20.1.3 顯式鏈接到導出的符號 627
20.2 DLL 的入口點函數 628
20.2.1 DLL_PROCESS_ATTACH 通知 630
20.2.2 DLL_PROCESS_DETACH 通知 631
20.2.3 DLL_THREAD_ATTACH 通知 633
20.2.4 DLL_THREAD_DETACH 通知 634
20.2.5 DllMain 的序列化調用 635
20.2.6 DllMain 和C/C++ 運行庫 638
20.3 延遲加載DLL 639
20.4 函數轉發器 652
20.5 已知的DLL 652
20.6 DLL 重定向 654
20.7 模塊的基址重定位 655
20.8 模塊的綁定 662
第21 章 線程局部存儲 667
21.1 動態TLS 668
21.2 靜態TLS 673
第22 章 DLL 註入和API 攔截 675
22.1 DLL 註入的一個例子 676
22.2 使用註冊表來註入DLL 678
22.3 使用Windows 掛鉤來註入DLL 680
22.4 使用遠程線程來註入DLL 694
22.4.1 Inject Library 示例程序 698
22.4.2 Image Walk DLL 705
22.5 使用木馬DLL 來註入DLL 708
22.6 將DLL 作為調試器來註入 708
22.7 使用CreateProcess 來註入代碼 709
22.8 API 攔截的一個例子 709
22.8.1 通過覆蓋代碼來攔截API 710
22.8.2 通過修改模塊的導入段來攔截API 711
22.8.3 Last MessageBox Info 示例程序 715
第V 部分 結構化異常處理
第23 章 終止處理程序 739
第24 章 異常處理程序與軟件異常 761
24.1 通過實例理解異常過濾程序和異常處理程序 762
24.1.1 Funcmeister1 函數 762
24.1.2 Funcmeister2 函數 763
24.2 EXCEPTION_EXECUTE_HANDLER 765
24.2.1 一些有用的例子 766
24.2.2 全局展開 769
24.2.3 停止全局展開 772
24.3 EXCEPTION_CONTINUE_EXECUTION 774
24.4 EXCEPTION_CONTINUE_SEARCH 776
24.5 GetExceptionCode 778
24.6 GetExceptionInformation 函數 783
24.7 軟件異常 787
第25 章 未處理異常、向量化異常處理與C++ 異常 791
25.1 UnhandledExceptionFilter 函數詳解 794
25.2 即時調試 799
25.3 Spreadsheet 示例程序 802
25.4 向量化異常和繼續處理程序 814
25.5 C++ 異常與結構化異常的比較 815
25.6 異常與調試器 817
第26 章 錯誤報告與應用程序恢復 821
26.1 Windows 錯誤報告控制台 821
26.2 可編程的Windows 錯誤報告 824
26.3 定製進程中的所有問題報告 826
26.4 問題報告的創建與定製 828
26.4.1 創建自定義問題報告 830
26.4.2 設置報告參數:WerReportSetParameter 832
26.4.3 將小型轉儲文件放入報告:WerReportAddDump 832
26.4.4 將任意文件放入報告:WerReportAddFile 833
26.4.5 修改對話框文本:WerReportSetUIOption 834
26.4.6 提交錯誤報告:WerReportSubmit 835
26.4.7 關閉問題報告:WerReportCloseHandle 836
26.4.8 Customized WER 示例程序 837
26.5 應用程序的自動重啟與恢復 845
26.5.1 應用程序的自動重啟 845
26.5.2 應用程序恢復的支持 846
附 錄
附錄A 生成環境 851
附錄B 消息處理宏、子控件宏和API 宏 865
索引 871