資源簡介
Jeffrey Richter是一位在全球享有盛譽的技術作家,尤其在Windows/.NET領域有著杰出的貢獻。他的第一本Windows著作Windows 3: A Developer's Guide大獲好評,從而聲名遠揚。之后,他又推出了經典著作《Windows 高級編程指南》和《Windows核心編程》。如今這兩本書早已成為Windows程序設計領域的顛峰之作,培育了幾代軟件開發設計人員。他的每一本新作問世,我們都有理由相信這是一本巨著,我們想要的一切盡在其中。Jeffery 是Wintellect公司的創始人之一,也是MSDN雜志.NET專欄的特邀編輯。現在他正領導開發該公司的.NET程序設計課程,向大眾推廣.NET技術。因為他自1999年開始就參與了微軟.NET框架開發組的咨詢工作,與這些一線人員一起經歷了.NET的孕育與誕生,所以他對.NET思想的領悟、對.NET的細節熟稔,是其他任何作家難以企及的。他是.NET著作領域中當之無愧的一面旗幟。
第0章 緒論
0.1 關于應用程序范例
0.1.1 用C語言編寫程序
0.1.2 Message Cracker Macros(消息拆析宏)
0.1.3 有關16位Windows編程的知識
0.1.4 在Windows 95下運行應用程序范例
0.1.5 不相關代碼
0.1.6 范例應用程序的獨立性
0.1.7 STRICT編譯
0.1.8 錯誤檢查
0.1.9 沒有錯誤
0.1.10 測試平臺和環境
0.1.11 Unicode
0.2 安裝范例程序
0.2.1 配套的CD-ROM盤
第1章 WIN 32 API和支持它的平臺
1.1 夢想一下:Win 32 API
1.2 Win 32s
1.3 Windows NT
1.4 Windows 95
.1.5 Windows CE
1.6 現實:Win 32 API
第2章 內核對象
2.1 什么是內核對象
2.1.1 使用計數
2.1.2 安全
2.2 進程的內核對象句柄表
2.2.1 創建內核對象
2.2.2 關閉內核對象
2.3 在進程間共享內核對象
2.3.1 對象句柄繼承
2.3.2 改變句柄標志
2.3.3 命名對象
2.3.4 復制對象句柄
第3章 進程
3.1 編寫第一個Win 32應用程序
3.1.1 進程的實例句柄
3.1.2 進程的前一個實例的句柄
3.1.3 進程的命令行
3.1.4 進程的環境變量
3.1.5 進程的錯誤模式
3.1.6 進程的當前驅動器和目錄
3.1.7 系統版本
3.2 CreateProcess函數
3.2.1 lpszApplicationName和lpszCommandline
3.2.2 lpsaProcess,lpsaThread和fInheritHandles
3.2.3 fdwCreate
3.2.4 lpvEnvironment
3.2.5 lpszCurDir
3.2.6 lpsiStartInfo
3.2.7 lppiProcInfo
3.3 終止進程
3.3.1 ExitProcess函數
3.3.2 Terminate Process函數
3.3.3 進程中的所有線程結束了
3.3.4 進程終結時發生的事情
3.4 子進程
3.4.1 運行分離的子進程
第4章 線程
4.1 何時創建線程
4.2 何時不用創建線程
4.3 編寫第一個線程函數
4.3.1 線程的棧
4.3.2 線程的CONTEXT結構
4.3.3 線程的執行時間
4.4 CreateThread函數
4.4.1 lpsa
4.4.2 cbstack
4.4.3 lpStartAddr和lpvThreadParm
4.4.4 fdwCreate
4.4.5 lpIDThread
4.5 終止線程
4.5.1 Exit Thread函數
4.5.2 TerminateThread函數
4.5.3 進程終結
4.5.4 線程終結時的情況
4.6 識別自己的身份
4.7 系統如何調度線程
4.7.1 使用Win 32 API怎樣賦優先級
4.7.2 改變進程的優先級類
4.7.3 設定線程的相對優先級
4.7.4 掛起和恢復線程
4.8 系統內部情況
4.9 進程、線程和C運行時庫
4.9.1 應避免使用的C運行時函數
第5章 Win 32內存結構
5.1 虛地址空間
5.1.1 Windows 95如何劃分進程的地址空間
5.1.2 Windows NT如何劃分進程的地址空間
5.2 地址空間中的區域
5.3 在區域內提交物理存儲
5.4 物理存儲
5.4.1 不包含在頁面文件中的物理存儲
5.5 保護屬性
5.5.1 寫拷貝訪問
5.5.2 特殊的訪問保護屬性標志
5.6 小結
5.6.1 區域的內部
5.7 Windows 95的地址空間的不同
第6章 虛擬內存
6.1 系統信息
6.1.1 系統信息范例應用程序
6.2 虛擬內存狀態
6.2.1 虛擬內存狀態范例應用程序
6.3 確定地址空間的狀態
6.3.1 VMQuery函數
6.3.2 虛擬內存映射范例應用程序
第7章 在應用程序中使用虛擬內存
7.1 在地址空間中保留區域
7.2 在保留區域中提交存儲
7.3 同時保留區域和提交物理存儲
7.4 何時提交物理存儲
7.5 釋放物理存儲和釋放區域
7.5.1 何時釋放物理存儲
7.5.2 虛擬內存分配范例應用程序
7.6 修改保護屬性
7.7 在RAM中鎖定物理存儲
7.8 重設物理存儲的內容
7.9 線程的棧
7.9.1 Windows 95下的線程的棧
7.9.2 C運行時庫的棧檢查函數
第8章 內存映射文件
8.1 內存映射EXE和DLL
8.1.1 不被EXE或DLL的多個實例共享的靜態數據
8.2 內存映射數據文件
8.2.1 方法1:一個文件,一個緩沖區
8.2.2 方法2:兩個文件,一個緩沖區
8.2.3 方法3:一個文件,兩個緩沖區
8.2.4 方法4:一個文件,零個緩沖區
8.3 使用內存映射文件
8.3.1 第1步:創建或打開文件內核對象
8.3.2 第2步:創建文件映射內核對象
8.3.3 第3步:將文件數據映射入進程地址空間
8.3.4 第4步:從進程地址空間中解除文件數據映射
8.3.5 第5步和第6步:關閉文件映射對象和文件對象
8.3.6 用內存映射文件處理大文件
8.4 內存映射文件和一致性
8.4.1 文件倒置范例應用程序
8.4.2 指定內存映射文件的基本地址
8.5 內存映射文件和Win 32實現
8.5.1 使用內存映射文件在進程間共享數據
8.5.2 由頁面文件支持的內存映射文件
8.5.3 內存映射文件共享范例應用程序
8.6 稀疏提交的內存映射文件
第9章 堆
9.1 什么是Win 32堆
9.1.1 進程的缺省堆
9.1.2 創建自己的Win 32堆
9.1.3 創建Win 32堆
9.1.4 釋放Win 32堆
9.1.5 在C++時使用堆
9.1.6 其他一些堆函數
9.2 16位Windows堆函數
第10章 線程同步
10.1 線程同步概述
10.2 最壞的事情
10.2.1 創建監臨界區
10.2.2 使用臨界區
10.2.3 臨界區范例應用程序
10.3 用內核對象同步線程
10.3.1 互斥量
10.3.2 互斥量范例應用程序
10.3.3 信號量
10.3.4 超市范例應用程序
10.3.5 事件
10.3.6 Bucket of Balls范例應用程序
10.3.7 SWMRG復合同步對象
10.3.8 Bucket范例源代碼
10.3.9 Document Statistics范例應用程序
10.3.10 可等的計時器
10.4 線程掛起
10.4.1 Sleep
10.4.2 異步文件I/O
10.4.3 WaitForLnputIdle
10.4.4 MsgWaitForMultipleObjects
10.4.5 WaitForDebugEvent
10.4.6 SignalObjectAndWait
10.4.7 Interlocked函數族
第11章 窗口消息和異步輸入
11.1 多任務
11.1.1 搶先式調度
11.2 線程隊列和消息處理
11.2.1 Win 32消息隊列結構
11.2.2 向線程的消息隊列投遞消息
11.2.3 發送消息給窗口
11.2.4 喚醒線程
11.3 用消息發送數據
11.3.1 CopyData范例應用程序
11.4 非序列化輸入
11.4.1 輸入如何被非序列化
11.5 局部輸入狀態
11.5.1 鍵盤輸入和焦點
11.5.2 鼠標光標管理
11.5.3 局部輸入狀態實驗范例應用程序
第12章 動態鏈接庫
12.1 創建動態鏈接
12.1.1 映射DLL到進程的地址空間
12.2 DLL的進入/退出函數
12.2.1 DLL_PROCESS_ATTACH
12.2.2 DLL_PROCESS_DATACH
12.2.3 DLL_THREAD_ATTACH
12.2.4 DLL_THREAD_DETACH
12.2.5 系統如何序列化對DllMain的調用
12.2.6 DllMain和C運行時庫
12.3 從DLL中輸出函數和變量
12.4 從DLL中引入函數和變量
12.4.1 DLL的頭文件
12.5 創建DLL供非Visual C++工具使用
12.6 在EXE或DLL映射之間共享數據
12.6.1 EXE或DLL中的節
12.6.2 ModUse范例應用程序
12.6.3 MultInst范例應用程序
第13章 線程局部存儲
13.1 動態線程局部存儲
13.1.1 使用動態線程局部存儲
13.1.2 動態線程局部存儲范例應用程序
13.2 靜態線程局部存儲
13.2.1 靜態線程局部存儲范例應用程序
第14章 文件系統
14.1 Win 32的文件名約定
14.2 系統和卷操作
14.2.1 得到卷的特定信息
14.2.2 磁盤信息查看范例應用程序
14.3 目錄操作
14.3.1 得到當前目錄
14.3.2 改變當前目錄
14.3.3 得到系統目錄
14.3.4 得到Windows目錄
14.3.5 創建和刪除目錄
14.4 拷貝、刪除、移動和重命名文件
14.4.1 拷貝文件
14.4.2 刪除文件
14.4.3 移動文件
14.4.4 重命名文件
14.5 查找文件
14.5.1 目錄漫游范例應用程序
14.6 文件系統變化通知
14.6.1 文件變化范例應用程序
14.7 操縱文件屬性
14.7.1 可執行文件類型
14.7.2 文件屬性
14.7.3 文件大小
14.7.4 文件時間戳
14.8 創建臨時文件
第15章 設備I/O
15.1 打開和關閉設備
15.1.1 CreateFile
15.2 使用文件設備
15.2.1 定位文件指針
15.2.2 設置文件尾
15.2.3 加鎖和解鎖文件的區域
15.3 進行同步I/O
15.3.1 向設備強制刷新數據
15.4 進行異步I/O
15.5 使設備內核對象有信號
15.6 使事件內核對象有信號
15.7 告警I/O
15.7.1 告警I/O范例應用程序
15.8 I/O完成端口
15.8.1 模擬完成I/O請求
15.8.2 I/O完成端口范例應用程序
15.9 判斷I/O請求是否完成
15.10 取消未完成的I/O請求
第16章 結構化異常處理
16.1 終止處理程序
16.1.1 理解終止處理程序
16.1.2 關于finally塊的一些注解
16.1.3 SEH終止范例應用程序
16.2 異常過濾程序和異常處理程序
16.2.1 理解異常過濾程序和異常處理程序
16.2.2 EXCEPTION_EXECUTE_HANDLER
16.2.3 EXCEPTION_CONTINUE_EXECUTION
16.2.4 EXCEPTION_CONTINUE_SEARCH
16.2.5 全局展開
16.2.6 停止全避展開
16.2.7 關于異常過濾程序的進一步討論
16.2.8 GetExceptionInformation
16.2.9 SEH異常范例應用程序
16.2.10 SEH Sum范例應用程序
16.3 軟件異常
16.3.1 SEH軟件異常范例應用程序
16.3.2 未處理的異常
16.3.3 沒有附屬調試器的未和的異常
16.3.4 不顯示異常消息框
16.3.5 自己調用UnhandledExceptionFilter
16.3.6 Windows NT的未處理的內核模式異常
第17章 Unicode
17.1 字符集
17.1.1 單字節和雙字節字符集
17.1.2 Unicode:寬字節字符集
17.2 為什么要使用Unicode
17.3 如何編寫Unicode源代碼
17.3.1 Windows NT和Unicode
17.3.2 Windows 95和Unicode
17.3.3 C運行時庫對Unicode的支持
17.3.4 Win 32定義的Unicode數據類型
17.3.5 Win 32中的Unicode和ANSI宏數
17.4 使你的程序能識別ANSI和Unicode
17.4.1 Win 32中的字符串函數
17.4.2 資源
17.4.3 文本
17.4.4 在Unicode和ANSI之間轉換字符串
17.4.5 Windows NT的窗口類和過程
第18章 打開進程邊界
18.1 為什么要打開進程邊界:一個例子
18.2 使用注冊表來注入DLL
18.3 使用Windows鉤來注入DLL
18.3.1 Desktop Item Position Savev工具
18.4 使用遠程線程注入DLL
18.4.1 如何裝入一個DLL
18.5 影響其他進程的Win 32函數
18.5.1 CreateRemoteThread
18.5.2 GetThreadContext和SetThreadContext
18.5.3 VirtualQueryEx和VirtualProtectEx
18.5.4 VirtualAllocEx和VirtualFreeEx
18.5.5 ReadProcessMemory和WriteProcessMemory
18.6 創建一個函數向任意進程的地址空間注入DLL
18.6.1 版本0:為什么顯然的方法不能工作
18.6.2 版本1:手編的機器語言
18.6.3 版本2:AllocProcessMemory和CreateRemore Thread
18.6.4 ProcMem工具函數
18.6.5 InjectLib函數
18.7 測試InjectLib函數
18.7.1 注入庫范例應用程序
18.7.2 映象遍歷動態鏈接庫
18.8 小結
附錄 A FIBERS
A.1 例程:計算器應用程序
附錄 B MESSAGE CRACKERC
B.1 Message Crackers
B.2 Child Control宏
B.3 API宏
附錄 C 編程環境
C.1 CMNHDR.H頭文件
C.1.1 4級警告
C.1.1 Windows版本
C.1.2 STRICT宏
C.1.3 CPU Prtability宏
C.1.4 標準編碼(Unicode)
C.1.5 chDIMOF宏
C.1.6 chBEGINTHEADEX宏
C.1.7 chASSERT 宏和chVERIFY宏
C.1.8 chHANDLE_DLGMSG宏
C.1.9 chassert宏和chVERIFY宏
C.1.10 chMB宏
C.1.11 chINITSTRUCT宏
C.1.12 chSETDLGICONS宏
C.1.13 chWARNIFUNICODEUNDERWIN 95宏
C.1.14 Pragma Message Helper宏
C.1.15 鏈接指令
C.2 在源文件中不能對項目進行設置
第0章 緒論
0.1 關于應用程序范例
0.1.1 用C語言編寫程序
0.1.2 Message Cracker Macros(消息拆析宏)
0.1.3 有關16位Windows編程的知識
0.1.4 在Windows 95下運行應用程序范例
0.1.5 不相關代碼
0.1.6 范例應用程序的獨立性
0.1.7 STRICT編譯
0.1.8 錯誤檢查
0.1.9 沒有錯誤
0.1.10 測試平臺和環境
0.1.11 Unicode
0.2 安裝范例程序
0.2.1 配套的CD-ROM盤
第1章 WIN 32 API和支持它的平臺
1.1 夢想一下:Win 32 API
1.2 Win 32s
1.3 Windows NT
1.4 Windows 95
.1.5 Windows CE
1.6 現實:Win 32 API
第2章 內核對象
2.1 什么是內核對象
2.1.1 使用計數
2.1.2 安全
2.2 進程的內核對象句柄表
2.2.1 創建內核對象
2.2.2 關閉內核對象
2.3 在進程間共享內核對象
2.3.1 對象句柄繼承
2.3.2 改變句柄標志
2.3.3 命名對象
2.3.4 復制對象句柄
第3章 進程
3.1 編寫第一個Win 32應用程序
3.1.1 進程的實例句柄
3.1.2 進程的前一個實例的句柄
3.1.3 進程的命令行
3.1.4 進程的環境變量
3.1.5 進程的錯誤模式
3.1.6 進程的當前驅動器和目錄
3.1.7 系統版本
3.2 CreateProcess函數
3.2.1 lpszApplicationName和lpszCommandline
3.2.2 lpsaProcess,lpsaThread和fInheritHandles
3.2.3 fdwCreate
3.2.4 lpvEnvironment
3.2.5 lpszCurDir
3.2.6 lpsiStartInfo
3.2.7 lppiProcInfo
3.3 終止進程
3.3.1 ExitProcess函數
3.3.2 Terminate Process函數
3.3.3 進程中的所有線程結束了
3.3.4 進程終結時發生的事情
3.4 子進程
3.4.1 運行分離的子進程
第4章 線程
4.1 何時創建線程
4.2 何時不用創建線程
4.3 編寫第一個線程函數
4.3.1 線程的棧
4.3.2 線程的CONTEXT結構
4.3.3 線程的執行時間
4.4 CreateThread函數
4.4.1 lpsa
4.4.2 cbstack
4.4.3 lpStartAddr和lpvThreadParm
4.4.4 fdwCreate
4.4.5 lpIDThread
4.5 終止線程
4.5.1 Exit Thread函數
4.5.2 TerminateThread函數
4.5.3 進程終結
4.5.4 線程終結時的情況
4.6 識別自己的身份
4.7 系統如何調度線程
4.7.1 使用Win 32 API怎樣賦優先級
4.7.2 改變進程的優先級類
4.7.3 設定線程的相對優先級
4.7.4 掛起和恢復線程
4.8 系統內部情況
4.9 進程、線程和C運行時庫
4.9.1 應避免使用的C運行時函數
第5章 Win 32內存結構
5.1 虛地址空間
5.1.1 Windows 95如何劃分進程的地址空間
5.1.2 Windows NT如何劃分進程的地址空間
5.2 地址空間中的區域
5.3 在區域內提交物理存儲
5.4 物理存儲
5.4.1 不包含在頁面文件中的物理存儲
5.5 保護屬性
5.5.1 寫拷貝訪問
5.5.2 特殊的訪問保護屬性標志
5.6 小結
5.6.1 區域的內部
5.7 Windows 95的地址空間的不同
第6章 虛擬內存
6.1 系統信息
6.1.1 系統信息范例應用程序
6.2 虛擬內存狀態
6.2.1 虛擬內存狀態范例應用程序
6.3 確定地址空間的狀態
6.3.1 VMQuery函數
6.3.2 虛擬內存映射范例應用程序
第7章 在應用程序中使用虛擬內存
7.1 在地址空間中保留區域
7.2 在保留區域中提交存儲
7.3 同時保留區域和提交物理存儲
7.4 何時提交物理存儲
7.5 釋放物理存儲和釋放區域
7.5.1 何時釋放物理存儲
7.5.2 虛擬內存分配范例應用程序
7.6 修改保護屬性
7.7 在RAM中鎖定物理存儲
7.8 重設物理存儲的內容
7.9 線程的棧
7.9.1 Windows 95下的線程的棧
7.9.2 C運行時庫的棧檢查函數
第8章 內存映射文件
8.1 內存映射EXE和DLL
8.1.1 不被EXE或DLL的多個實例共享的靜態數據
8.2 內存映射數據文件
8.2.1 方法1:一個文件,一個緩沖區
8.2.2 方法2:兩個文件,一個緩沖區
8.2.3 方法3:一個文件,兩個緩沖區
8.2.4 方法4:一個文件,零個緩沖區
8.3 使用內存映射文件
8.3.1 第1步:創建或打開文件內核對象
8.3.2 第2步:創建文件映射內核對象
8.3.3 第3步:將文件數據映射入進程地址空間
8.3.4 第4步:從進程地址空間中解除文件數據映射
8.3.5 第5步和第6步:關閉文件映射對象和文件對象
8.3.6 用內存映射文件處理大文件
8.4 內存映射文件和一致性
8.4.1 文件倒置范例應用程序
8.4.2 指定內存映射文件的基本地址
8.5 內存映射文件和Win 32實現
8.5.1 使用內存映射文件在進程間共享數據
8.5.2 由頁面文件支持的內存映射文件
8.5.3 內存映射文件共享范例應用程序
8.6 稀疏提交的內存映射文件
第9章 堆
9.1 什么是Win 32堆
9.1.1 進程的缺省堆
9.1.2 創建自己的Win 32堆
9.1.3 創建Win 32堆
9.1.4 釋放Win 32堆
9.1.5 在C++時使用堆
9.1.6 其他一些堆函數
9.2 16位Windows堆函數
第10章 線程同步
10.1 線程同步概述
10.2 最壞的事情
10.2.1 創建監臨界區
10.2.2 使用臨界區
10.2.3 臨界區范例應用程序
10.3 用內核對象同步線程
10.3.1 互斥量
10.3.2 互斥量范例應用程序
10.3.3 信號量
10.3.4 超市范例應用程序
10.3.5 事件
10.3.6 Bucket of Balls范例應用程序
10.3.7 SWMRG復合同步對象
10.3.8 Bucket范例源代碼
10.3.9 Document Statistics范例應用程序
10.3.10 可等的計時器
10.4 線程掛起
10.4.1 Sleep
10.4.2 異步文件I/O
10.4.3 WaitForLnputIdle
10.4.4 MsgWaitForMultipleObjects
10.4.5 WaitForDebugEvent
10.4.6 SignalObjectAndWait
10.4.7 Interlocked函數族
第11章 窗口消息和異步輸入
11.1 多任務
11.1.1 搶先式調度
11.2 線程隊列和消息處理
11.2.1 Win 32消息隊列結構
11.2.2 向線程的消息隊列投遞消息
11.2.3 發送消息給窗口
11.2.4 喚醒線程
11.3 用消息發送數據
11.3.1 CopyData范例應用程序
11.4 非序列化輸入
11.4.1 輸入如何被非序列化
11.5 局部輸入狀態
11.5.1 鍵盤輸入和焦點
11.5.2 鼠標光標管理
11.5.3 局部輸入狀態實驗范例應用程序
第12章 動態鏈接庫
12.1 創建動態鏈接
12.1.1 映射DLL到進程的地址空間
12.2 DLL的進入/退出函數
12.2.1 DLL_PROCESS_ATTACH
12.2.2 DLL_PROCESS_DATACH
12.2.3 DLL_THREAD_ATTACH
12.2.4 DLL_THREAD_DETACH
12.2.5 系統如何序列化對DllMain的調用
12.2.6 DllMain和C運行時庫
12.3 從DLL中輸出函數和變量
12.4 從DLL中引入函數和變量
12.4.1 DLL的頭文件
12.5 創建DLL供非Visual C++工具使用
12.6 在EXE或DLL映射之間共享數據
12.6.1 EXE或DLL中的節
12.6.2 ModUse范例應用程序
12.6.3 MultInst范例應用程序
第13章 線程局部存儲
13.1 動態線程局部存儲
13.1.1 使用動態線程局部存儲
13.1.2 動態線程局部存儲范例應用程序
13.2 靜態線程局部存儲
13.2.1 靜態線程局部存儲范例應用程序
第14章 文件系統
14.1 Win 32的文件名約定
14.2 系統和卷操作
14.2.1 得到卷的特定信息
14.2.2 磁盤信息查看范例應用程序
14.3 目錄操作
14.3.1 得到當前目錄
14.3.2 改變當前目錄
14.3.3 得到系統目錄
14.3.4 得到Windows目錄
14.3.5 創建和刪除目錄
14.4 拷貝、刪除、移動和重命名文件
14.4.1 拷貝文件
14.4.2 刪除文件
14.4.3 移動文件
14.4.4 重命名文件
14.5 查找文件
14.5.1 目錄漫游范例應用程序
14.6 文件系統變化通知
14.6.1 文件變化范例應用程序
14.7 操縱文件屬性
14.7.1 可執行文件類型
14.7.2 文件屬性
14.7.3 文件大小
14.7.4 文件時間戳
14.8 創建臨時文件
第15章 設備I/O
15.1 打開和關閉設備
15.1.1 CreateFile
15.2 使用文件設備
15.2.1 定位文件指針
15.2.2 設置文件尾
15.2.3 加鎖和解鎖文件的區域
15.3 進行同步I/O
15.3.1 向設備強制刷新數據
15.4 進行異步I/O
15.5 使設備內核對象有信號
15.6 使事件內核對象有信號
15.7 告警I/O
15.7.1 告警I/O范例應用程序
15.8 I/O完成端口
15.8.1 模擬完成I/O請求
15.8.2 I/O完成端口范例應用程序
15.9 判斷I/O請求是否完成
15.10 取消未完成的I/O請求
第16章 結構化異常處理
16.1 終止處理程序
16.1.1 理解終止處理程序
16.1.2 關于finally塊的一些注解
16.1.3 SEH終止范例應用程序
16.2 異常過濾程序和異常處理程序
16.2.1 理解異常過濾程序和異常處理程序
16.2.2 EXCEPTION_EXECUTE_HANDLER
16.2.3 EXCEPTION_CONTINUE_EXECUTION
16.2.4 EXCEPTION_CONTINUE_SEARCH
16.2.5 全局展開
16.2.6 停止全避展開
16.2.7 關于異常過濾程序的進一步討論
16.2.8 GetExceptionInformation
16.2.9 SEH異常范例應用程序
16.2.10 SEH Sum范例應用程序
16.3 軟件異常
16.3.1 SEH軟件異常范例應用程序
16.3.2 未處理的異常
16.3.3 沒有附屬調試器的未和的異常
16.3.4 不顯示異常消息框
16.3.5 自己調用UnhandledExceptionFilter
16.3.6 Windows NT的未處理的內核模式異常
第17章 Unicode
17.1 字符集
17.1.1 單字節和雙字節字符集
17.1.2 Unicode:寬字節字符集
17.2 為什么要使用Unicode
17.3 如何編寫Unicode源代碼
17.3.1 Windows NT和Unicode
17.3.2 Windows 95和Unicode
17.3.3 C運行時庫對Unicode的支持
17.3.4 Win 32定義的Unicode數據類型
17.3.5 Win 32中的Unicode和ANSI宏數
17.4 使你的程序能識別ANSI和Unicode
17.4.1 Win 32中的字符串函數
17.4.2 資源
17.4.3 文本
17.4.4 在Unicode和ANSI之間轉換字符串
17.4.5 Windows NT的窗口類和過程
第18章 打開進程邊界
18.1 為什么要打開進程邊界:一個例子
18.2 使用注冊表來注入DLL
18.3 使用Windows鉤來注入DLL
18.3.1 Desktop Item Position Savev工具
18.4 使用遠程線程注入DLL
18.4.1 如何裝入一個DLL
18.5 影響其他進程的Win 32函數
18.5.1 CreateRemoteThread
18.5.2 GetThreadContext和SetThreadContext
18.5.3 VirtualQueryEx和VirtualProtectEx
18.5.4 VirtualAllocEx和VirtualFreeEx
18.5.5 ReadProcessMemory和WriteProcessMemory
18.6 創建一個函數向任意進程的地址空間注入DLL
18.6.1 版本0:為什么顯然的方法不能工作
18.6.2 版本1:手編的機器語言
18.6.3 版本2:AllocProcessMemory和CreateRemore Thread
18.6.4 ProcMem工具函數
18.6.5 InjectLib函數
18.7 測試InjectLib函數
18.7.1 注入庫范例應用程序
18.7.2 映象遍歷動態鏈接庫
18.8 小結
附錄 A FIBERS
A.1 例程:計算器應用程序
附錄 B MESSAGE CRACKERC
B.1 Message Crackers
B.2 Child Control宏
B.3 API宏
附錄 C 編程環境
C.1 CMNHDR.H頭文件
C.1.1 4級警告
C.1.1 Windows版本
C.1.2 STRICT宏
C.1.3 CPU Prtability宏
C.1.4 標準編碼(Unicode)
C.1.5 chDIMOF宏
C.1.6 chBEGINTHEADEX宏
C.1.7 chASSERT 宏和chVERIFY宏
C.1.8 chHANDLE_DLGMSG宏
C.1.9 chassert宏和chVERIFY宏
C.1.10 chMB宏
C.1.11 chINITSTRUCT宏
C.1.12 chSETDLGICONS宏
C.1.13 chWARNIFUNICODEUNDERWIN 95宏
C.1.14 Pragma Message Helper宏
C.1.15 鏈接指令
C.2 在源文件中不能對項目進行設置
代碼片段和文件信息
- 上一篇:無碳小車cad和solidworks圖紙
- 下一篇:DJGPP自動運行版
評論
共有 條評論