內容簡介
詳細講解API和關鍵結構的使用方法
提供156個WindowsAPI使用實例
涵蓋主題:
Windows應用程式開發入門;開發工具配置與使用;檔案系統;記憶體管理;進程、執行緒和模組;執行緒同步;服務;圖形用戶界面;系統信息的管理;進程間通信;WindowsSheLL程式設計;WindOWSGDl;網路通信與配置;設備驅動管理與核心通信;用戶、認證和對象安全;WindowsAPI的內部原理。
註:附CD-ROM光碟一張。
編輯推薦
WindowsAPI(WindowsApplicationProgramInterface,Windows應用程式接口)是一系列函式、宏、數據類型、數據結構的集合,運行於Windows系統的應用程式,可以使用作業系統提供的接口來實現需要的功能。《精通WindowsAPI:函式、接口、編程實例》由淺入深、循序漸進地教授讀者如何使用WindowsAPI進行Windows應用程式開發。
《精通WindowsAPI:函式、接口、編程實例》適合廣大的Windows應用程式開發人員、VC++開發工程師、網路遊戲開發人員、軟體培訓機構學員和高校學生閱讀。
目錄
第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
……