第1章 Windows應用程序開發入門 1
1.1 第一個實例程序 1
1.1.1 start.exe 1
1.1.2 Windows API 2
1.1.3 程序入口函數 2
1.1.4 start.c代碼分析 2
1.2 編譯代碼 3
1.2.1 安裝Visual Studio 3
1.2.2 安裝Microsoft Platform SDK 4
1.2.3 集成Microsoft Platform SDK與Visual C++速成版 5
1.2.4 Vista SDK與Visual Studio 2008 6
1.2.5 Visual Studio專業版或團隊係統版 7
1.2.6 使用圖形化IDE建立工程、進行編譯 7
1.2.7 “解決方案”與“工程” 8
1.2.8 使用命令行工具編譯 8
第2章 Windows API概要 10
2.1 Windows數據類型 10
2.1.1 Windows數據類型示例 10
2.1.2 Windows數據類型與標準C數據類型的關係 14
2.1.3 Windows數據類型與Windows API 14
2.1.4 Windows中的數據結構 15
2.2 Windows API的功能分類 15
2.2.1 係統基本服務 15
2.2.2 係統管理 17
2.2.3 用戶界麵 17
2.2.4 圖像和多媒體 20
2.2.5 網絡 20
2.2.6 係統安全 20
2.2.7 其他功能 21
2.3 Windows API核心DLL 21
2.3.1 Kernel32.dll 21
2.3.2 User32.dll 21
2.3.3 Gdi32.dll 22
2.3.4 標準C函數 22
2.3.5 其他Dll 22
2.4 Unicode和多字節 22
2.4.1 W版本和A版本的API 24
2.4.2 Unicode與ASCII的轉換 24
2.5 對Windows程序設計規範的建議 25
第3章 開發工具配置與使用 26
3.1 使用Visual C/C++編譯鏈接工具 26
3.1.1 編譯器cl.exe 27
3.1.2 資源編譯器rc.exe 31
3.1.3 鏈接器link.exe 32
3.1.4 其他工具 38
3.1.5 編譯鏈接工具依賴的環境變量 39
3.1.6 示例:使用/D選項進行條件編譯 42
3.2 使用Platform SDK 43
3.2.1 Platform SDK的目錄結構與功能 43
3.2.2 為編譯鏈接工具設置環境變量 45
3.2.3 Platform SDK工具集 46
3.2.4 Windows Vista SDK 48
3.3 編寫Makefile 48
3.3.1 使用nmake.exe構建工程 48
3.3.2 Makefile實例 50
3.3.3 注釋 50
3.3.4 宏 50
3.3.5 描述塊:目標、依賴項和命令 53
3.3.6 makefile預處理 55
3.3.7 在Platform SDK的基礎上使用nmake 56
3.4 使用WinDbg調試 57
3.4.1 安裝WinDbg 57
3.4.2 編譯可調試的程序 58
3.4.3 WinDbg命令 59
3.4.4 調試過程演示 59
3.5 集成開發環境 Visual Studio 62
3.5.1 工程類型選擇與配置 62
3.5.2 Visual Studio快捷方式 64
3.5.3 生成項目 64
3.5.4 調試 65
3.5.5 選項與設置 65
3.6 開發環境配置總結 66
第4章 文件係統 67
4.1 概述 67
4.1.1 文件係統的基本概念 67
4.1.2 文件係統主要API 68
4.2 磁盤和驅動器管理 70
4.2.1 遍曆捲並獲取屬性 70
4.2.2 操作驅動器掛載點 76
4.2.3 判斷光驅中是否有光盤 81
4.2.4 獲取磁盤分區的總容量、空閑容量、簇、扇區信息 83
4.3 文件和目錄管理 86
4.3.1 刪除、復製、重命名、移動文件 87
4.3.2 創建、打開、讀寫文件,獲取文件大小 90
4.3.3 創建目錄 96
4.3.4 獲取程序所在的目錄、程序模塊路徑,獲取和設置當前目錄 97
4.3.5 查找文件、遍曆指定目錄下的文件和子目錄 100
4.3.6 遞歸遍曆目錄樹 103
4.3.7 獲取、設置文件屬性和時間 105
4.4 內存映射文件 110
4.4.1 使用Mapping File提高文件讀寫的效率 110
4.4.2 通過Mapping File在進程間傳遞和共享數據 115
4.4.3 通過文件句柄獲得文件路徑 118
4.5 總結 121
第5章 內存管理 122
5.1 Windows內存管理原理 122
5.1.1 基本概念 122
5.1.2 分頁與分段內存管理、內存映射與地址轉換 123
5.1.3 進程的內存空間 125
5.1.4 虛擬內存布局、內存的分工、堆與棧 127
5.1.5 內存的保護屬性和存取權限 127
5.1.6 本章API列錶 127
5.2 堆管理 129
5.2.1 獲取堆句柄、分配與再分配堆 129
5.2.2 獲取堆中內存塊的大小信息 133
5.2.3 釋放內存、銷毀堆 134
5.3 全局(Global)和局部(Local)內存管理 136
5.3.1 Global函數 136
5.3.2 Local函數 137
5.3.3 使用全局和局部函數分配和釋放內存、改變內存塊屬性 137
5.4 虛擬內存管理 138
5.4.1 虛擬地址空間與內存分頁 139
5.4.2 分配和釋放可讀可寫的虛擬內存頁麵 139
5.4.3 修改內存頁麵狀態和保護屬性、將頁麵鎖定在物理內存中 142
5.4.4 管理其他進程的虛擬內存 143
5.5 內存操作與內存信息管理 144
5.5.1 復製、填充、移動、清零內存塊、防止緩衝區溢齣 144
5.5.2 獲得當前係統內存使用情況 146
5.5.3 判斷內存指針的可用性 147
5.6 各種內存分配方式的關係與比較 148
5.6.1 標準C內存管理函數與Windows內存管理API的關係 149
5.6.2 功能性區彆 149
5.6.3 效率的區彆 149
第6章 進程、綫程和模塊 150
6.1 基本概念 150
6.1.1 應用程序與進程 150
6.1.2 控製颱應用程序與圖形用戶界麵應用程序 151
6.1.3 動態鏈接庫、模塊 151
6.1.4 綫程、縴程與作業 152
6.1.5 權限與優先級 153
6.2 進程管理 153
6.2.1 創建進程、獲取進程相關信息、獲取啓動參數 153
6.2.2 編寫控製颱程序和圖形用戶界麵應用程序 158
6.2.3 獲取和設置環境變量 158
6.3 綫程、縴程 162
6.3.1 創建綫程、退齣綫程、獲取綫程信息 162
6.3.2 掛起、恢復、切換、終止綫程 164
6.3.3 創建遠程綫程、將代碼注入其他進程中執行 167
6.3.4 創建縴程、刪除縴程、調度縴程 170
6.3.5 縴程與綫程的互相轉換 171
6.4 進程狀態信息 176
6.4.1 PS API與Tool help API 176
6.4.2 遍曆係統中的進程 178
6.4.3 列舉進程的模塊、綫程 182
6.4.4 進程的堆使用、內存占用、虛擬內存大小,頁麵錯誤情況 184
6.5 動態鏈接庫 185
6.5.1 加載、釋放DLL、通過句柄獲取DLL相關信息 186
6.5.2 編寫動態鏈接庫、導齣函數 186
6.5.3 創建動態鏈接庫工程,配置DLL編譯鏈接選項 188
6.5.4 運行時動態獲取DLL導齣函數地址並調用 189
6.5.5 聲明導齣函數、創建lib庫,為其他模塊提供導入錶調用接口 190
6.5.6 通過構建導入錶調用DLL導齣函數 191
第7章 綫程同步 192
7.1 基本原理 192
7.1.1 綫程同步的過程 193
7.1.2 同步對象 193
7.1.3 等待函數 193
7.2 同步對象示例 194
7.2.1 使用事件對象(Event) 194
7.2.2 使用互斥對象(Mutex) 199
7.2.3 使用信號量控製訪問共享數據的綫程數量 202
7.2.4 使用可等待計時器(Timer) 206
7.3 等待進程和綫程的執行完成 209
第8章 服務 210
8.1 基本概念 210
8.1.1 服務控製器(SCM) 211
8.1.2 服務程序 211
8.1.3 服務控製管理程序 211
8.1.4 係統服務管理工具 211
8.1.5 服務的屬性 211
8.2 編寫服務程序 212
8.2.1 入口函數 212
8.2.2 服務主函數 212
8.2.3 控製處理函數 213
8.3 實現對服務的控製和管理 216
8.3.1 創建、刪除服務 216
8.3.2 啓動、停止服務,嚮服務發送控製請求 219
8.3.3 管理服務狀態、配置服務、服務的依賴關係 222
第9章 圖形用戶界麵 229
9.1 字符界麵程序 229
9.1.1 基本概念 230
9.1.2 控製颱讀寫 231
9.1.3 控製颱字體、顔色等屬性,操作屏幕緩存 234
9.1.4 控製颱事件 244
9.2 圖形用戶界麵:基本概念 246
9.2.1 窗口 246
9.2.2 窗口類 246
9.2.3 消息和消息處理函數 247
9.2.4 控件 247
9.2.5 資源 248
9.2.6 對話框 248
9.3 圖形用戶界麵:窗口 248
9.3.1 注冊窗口類 249
9.3.2 創建窗口 251
9.3.3 窗口消息處理函數 253
9.3.4 窗口屬性、位置和大小 256
9.3.5 窗口顯示方式 257
9.3.6 綫程消息隊列和消息循環 258
9.4 圖形用戶界麵:控件 258
9.4.1 Tree View控件 258
9.4.2 為Tree View控件增加節點 260
9.4.3 Tree View右鍵菜單 262
9.4.4 List View控件 263
9.4.5 為List View控件增加分欄 265
9.4.6 為List View控件增加項 266
9.4.7 文本框控件 267
9.4.8 為文本框控件設置文字 268
9.5 界麵資源 269
9.5.1 資源腳本(.rc) 269
9.5.2 資源ID定義和頭文件 272
9.5.3 在程序中使用資源 273
9.6 菜單 273
9.6.1 菜單資源和菜單句柄 273
9.6.2 動態增加、刪除、設置菜單及菜單項 274
9.6.3 菜單消息處理 274
9.7 對話框 275
9.7.1 創建對話框 275
9.7.2 對話框消息處理函數 276
第10章 係統信息的管理 277
10.1 Windows係統信息 277
10.1.1 獲取係統版本 277
10.1.2 獲取計算機硬件信息 279
10.1.3 獲取係統目錄等信息 281
10.1.4 用戶名、計算機名、域名 282
10.1.5 處理係統顔色信息、尺度信息等 284
10.1.6 鼠標、鍵盤等外設信息 285
10.2 時間信息 286
10.2.1 設置、獲取係統時間 286
10.2.2 獲取開機至現在持續的時間 287
10.2.3 文件時間與係統時間的轉換 287
10.3 注冊錶 288
10.3.1 注冊錶的作用及組織形式 288
10.3.2 鍵、子鍵、鍵屬性及鍵值的相關操作 289
10.3.3 列舉注冊錶項及鍵值 292
10.3.4 通過注冊錶設置一個自啓動的程序 293
10.3.5 設置隨程序啓動而啓動的調試器(任何程序) 294
10.3.6 指定程序崩潰實時調試器 294
第11章 進程間通信 295
11.1 郵槽(MailSlot) 295
11.1.1 創建郵槽、從郵槽中讀取消息 296
11.1.2 通過郵槽發送消息 299
11.2 管道(Pipe) 300
11.2.1 創建命名管道 300
11.2.2 管道監聽 302
11.2.3 使用異步I/O進行讀寫 303
11.2.4 關閉管道實例 307
11.2.5 客戶端 307
11.3 剪貼闆 310
11.3.1 獲取、設置剪貼闆數據 310
11.3.2 監視剪貼闆 317
11.3.3 剪貼闆數據格式 325
11.4 數據復製消息(WM_COPYDATA) 327
11.4.1 數據發送端 327
11.4.2 數據接收端 330
11.5 其他進程間通信方式 332
11.5.1 動態數據交換(DDE)和網絡動態數據交換(NDDE) 332
11.5.2 通過File Mapping在進程間共享數據 333
11.5.3 Windows Socket 333
第12章 Windows Shell程序設計 334
12.1 Windows Shell目錄管理 335
12.1.1 Shell對目錄和文件的管理形式 335
12.1.2 “我的文檔”等特殊目錄相關操作 335
12.1.3 綁定、遍曆、屬性獲取 337
12.1.4 瀏覽文件對話框 339
12.2 文件協助(File Associations) 340
12.2.1 文件類型相關注冊錶鍵值 340
12.2.2 為文件指定默認打開程序 341
12.2.3 定製文件類型的圖標 342
12.3 Shell擴展 343
12.3.1 對象及概念 343
12.3.2 CLSID,處理例程的GUID 344
12.3.3 注冊Shell擴展 345
12.3.4 COM程序開發基礎 346
12.3.5 編寫Handler程序 346
12.3.6 Shell擴展程序的調試 362
12.3.7 總結 363
12.4 任務欄通知區域(Tray)圖標 363
12.4.1 創建圖標窗口 364
12.4.2 創建圖標和圖標菜單 367
12.4.3 最小化主窗口到通知區域 370
12.4.4 彈齣氣泡通知 372
12.4.5 動態圖標 374
12.4.6 其他功能 376
第13章 Windows GDI 379
13.1 GDI編程接口概述 379
13.1.1 Windows GDI的功能 379
13.1.2 鏈接庫與頭文件 380
13.2 設備上下文(DC)、輸齣操作與圖形對象 380
13.2.1 設備上下文類型與關聯設備 380
13.2.2 圖形對象的作用及與DC的關係 380
13.2.3 各類圖形對象的具體屬性與作用 383
13.2.4 繪製、填充、寫入等圖形輸齣操作 384
13.2.5 修剪與坐標變換 385
13.2.6 設備上下文的圖形模式 385
13.3 一個最簡單的GDI程序 386
13.3.1 示例 386
13.3.2 DC的操作 387
13.3.3 顔色的錶示 388
13.3.4 圖形對象:畫刷和畫筆 389
13.3.5 輸齣操作:繪製圖形和綫條 390
13.4 文字和字體 391
13.4.1 選擇、設置字體 393
13.4.2 選擇字體圖形對象 394
13.4.3 文字的顔色 394
13.4.4 輸齣文字 395
13.4.5 DC圖形模式設置 395
13.4.6 遍曆字體 396
13.4.7 為係統安裝、刪除字體文件 398
13.5 繪製綫條 398
13.5.1 選擇畫筆對象 399
13.5.2 直綫 399
13.5.3 繪製任意麯綫 399
13.5.4 跟蹤鼠標軌跡 399
13.5.5 弧綫 405
13.6 繪製圖形 405
13.6.1 填充顔色與邊緣勾勒 406
13.6.2 繪製矩形、橢圓、圓角矩形 406
13.6.3 橢圓弓形和橢圓扇形 411
13.6.4 多邊形 411
13.6.5 RECT結構及對RECT的操作 412
13.7 位圖操作 414
13.7.1 截取屏幕、保存位圖文件 414
13.7.2 將位圖顯示在界麵上 419
13.8 區域(Regions)、路徑(Paths)與修剪(Clip)操作 422
13.8.1 區域的創建及形狀、位置等屬性 422
13.8.2 區域邊沿、區域填充、反轉與勾勒操作 423
13.8.3 組閤、比較、移動等操作 426
13.8.4 點擊測試(Hit Testing) 427
13.8.5 路徑的創建與操作 431
13.8.6 路徑轉換為區域 432
13.8.7 使用區域和路徑進行修剪操作,限製輸齣 432
13.9 坐標變換 438
13.9.1 縮放 439
13.9.2 鏇轉 440
13.10 調色闆 440
第14章 網絡通信與配置 443
14.1 Socket通信 444
14.1.1 客戶端 444
14.1.2 服務端 449
14.1.3 處理並發的客戶端連接 455
14.1.4 網絡通信的異步I/O模式 456
14.2 IP Helper 456
第15章 程序安裝與設置 463
15.1 創建cab文件 463
15.1.1 makecab.exe 463
15.1.2 壓縮多個文件 464
15.1.3 Cabinet軟件開發工具包(CABSDK) 466
15.2 編寫INF文件 466
15.2.1 INF文件格式 466
15.2.2 Install節 468
15.2.3 CopyFiles和AddReg等安裝過程 468
15.2.4 源路徑和目的路徑 469
15.2.5 字符串錶 469
15.3 安裝程序setup.exe的編號 469
15.4 使用msi文件進行安裝 472
15.4.1 Windows Installer Service 472
15.4.2 msi文件的創建與修改工具orca.exe 474
15.4.3 準備工作 475
15.4.4 編輯錶組 475
第16章 設備驅動管理與內核通信 476
16.1 設備管理 476
16.1.1 列舉設備接口 477
16.1.2 監控設備的加載和卸載 483
16.2 I/O控製、內核通信 488
16.2.1 加載驅動程序 488
16.2.2 控製驅動程序、與驅動程序進行通信 495
16.3 編寫設備驅動程序 498
16.3.1 驅動程序開發包:DDK 499
16.3.2 開發驅動程序 499
16.4 I/O模式,同步與異步 504
第17章 用戶、認證和對象安全 506
17.1 基本概念 506
17.1.1 訪問令牌、權限和用戶標識 506
17.1.2 進程的係統操作權限 507
17.1.3 安全對象 508
17.1.4 訪問控製列錶(ACL) 508
17.2 安全機製程序示例 509
17.2.1 列舉進程訪問令牌內容和權限 509
17.2.2 修改進程的權限 514
17.2.3 列舉安全對象的安全描述符 515
17.2.4 修改安全描述符 521
17.3 用戶 522
17.3.1 創建用戶 522
17.3.2 用戶組 523
17.3.3 刪除用戶 525
17.3.4 列舉用戶和用戶組、獲取用戶信息 525
第18章 Windows API的內部原理 532
18.1 關於API的補充說明 532
18.1.1 Windows API的版本演進和Vista新增API 532
18.1.2 64位操作係統的接口 533
18.2 Windows係統中的對象封裝 533
18.2.1 什麼是對象 534
18.2.2 麵嚮對象的思想 534
18.2.3 Windows係統中的對象:內核對象、GDI對象等 534
18.3 Windows程序設計參考:文檔資源與樣例代碼 534
18.3.1 SDK文檔和MSDN 534
18.3.2 SDK示例代碼 535
18.4 x86平颱程序函數調用原理 535
18.4.1 函數調用的真實過程 535
18.4.2 函數調用約定 539
18.4.3 為什麼通過參數返迴數據時隻能使用指針 540
18.4.4 緩衝區溢齣 540
18.4.5 程序運行錯誤的調試技巧 540
18.5 可執行程序結構與API函數接口內部機理 541
18.5.1 Windows可執行程序結構 541
18.5.2 導入錶、導齣錶、動態鏈接 543
18.5.3 NTDLL.DLL、NATIVE API和SSDT 544
18.5.4 API HOOK 546
18.6 發布程序 546
18.6.1 閤理選擇編譯鏈接選項 546
18.6.2 構建到指定路徑 546
18.7 模塊化,嚮Windows API學習接口定義 547
18.7.1 lib文件 547
18.7.2 頭文件 547
18.7.3 為第三方應用軟件提供SDK 547
……
· · · · · · (
收起)