第一章 Windows 95编程环境 1
1.1 扩展的文件系统 1
1.2 内存映像文件 1
1.3 内存管理 1
1.4 结构化异常处理 2
1.5 进程和线程 2
1.6 抢先式多任务 2
第二章 应用程序编程接口 3
2.1 各类API简介 3
2.1.1 Win16 4
2.1.2 Win32s 5
2.1.3 Win32-95 5
2.1.4 Win32 6
2.2 各类Windows操作系统简介 6
2.2.1 Windows 3.1 7
2.2.2 Windows 95 8
2.2.3 Windows NT 9
2.3 16位版本与32位版本 10
2.3.1 16位版本 10
2.3.2 32位版本 11
第三章 移植到Windows——入门 12
3.1 HELLO1——Windows 3.1起点 12
3.2 HELLO2——清理代码 16
3.3 HELLO3——最终版本 21
3.4 移植的途径 21
3.4.1 证实Win16应用程序 22
3.4.2 转变到32位编程 22
3.4.3 清理32位代码 22
3.5.1 异步输入模型 23
3.4.4 使用新的Windows特性 23
3.5 Wincdows 95结构问题 23
3.5.2 分离的地址空间 24
3.5.3 指针问题 24
3.5.4 内存共享 25
3.6 Windows 95语法问题 25
3.6.1 转移到32位 25
3.6.2 消息包中的改变 25
3.6.3 Intel的消失 26
3.6.4 MS-DOS的消失 26
3.6.5 其他语法改变 26
3.7 文件操作的问题 27
3.8 一个关于移植的评论 27
第四章 移植到Windows——揭秘 28
5.1 内存寻址模式 52
第五章 Windows 95内存分配 52
5.2 内存管理API 53
5.3 从局部堆中分配内存 53
5.4 从全局堆中分配内存 54
5.5 C运行库分配函数 55
5.6 堆内存 55
5.6.1 启动内存要求 56
5.6.2 面向对象的结构 56
5.6.3 每窗口一个堆 56
5.6.4 执行效率 57
5.6.5 清理中的方便 57
5.6.6 结构化异常处理 57
5.7 内存映像文件 57
5.8.1 页状态 58
5.8.2 保留和约定页 58
5.8 虚拟内存 58
5.8.3 取消和释放页 59
5.8.4 判断虚拟内存的状态 59
5.8.5 使用虚拟内存时的考虑 60
5.9 内存管理内部结构 60
5.9.1 地址空间 61
5.9.2 虚拟内存管理器 62
5.9.3 在进程之间共享内存 64
5.9.4 执行内存管理API 65
5.9.5 内存地址翻译 65
5.9.6 内存状态 66
第六章 进程和线程 68
6.1 进程样本程序 68
6.2 终止一个进程 82
6.3 更具体地理解CreateProcess 83
6.4 更详细地理解STARTUPINFO 85
6.5 线程样本程序 87
6.6 终止客户线程 106
6.7 更详细地理解CreateThread 107
6.8 进程与线程 108
6.9 实句柄和伪句柄 109
6.10 进程间通信 110
6.11 何时使用多进程 111
6.11.1 一个客户—服务器数据库应用程序 111
6.11.2 工业数据获取 112
6.11.3 一个客户服务应用程序 112
6.12 何时使用多线程 113
第七章 共享与同步 114
7.1 当数据被共享时 114
7.2 当一个线程等待一个事件时 114
7.5.1 临界区 115
7.5 同步对象的类型 115
7.3 当死锁必须被避免时 115
7.4 同步如何工作 115
7.5.2 进程 116
7.5.3 线程 116
7.5.4 互斥标志 116
7.5.5 信号类 117
7.5.6 自动复位事件 117
7.5.7 人工复位事件 117
7.6 等待一个同步事件 118
7.6.1 使用单个对象的同步 118
7.6.2 使用多个对象的同步 119
7.6.3 使用多个对象中的一个的同步 119
7.6.4 使用一个消息的同步 120
7.7 使用临界区 121
7.8 使用进程和线程的同步 122
7.9 使用一个互斥标志的同步 123
7.10 一个互斥标志样本程序 125
7.11 使用一个信号灯的同步 136
7.12 一个信号灯样本程序 138
7.13 使用事件的同步 146
7.14 一个事件样本程序 147
7.15 互锁变量 162
7.16 GDI和同步 163
7.17 堆管理和同步 163
7.18 程序设计和同步 163
第八章 Windows 95的文件系统 166
8.1 基本文件操作 166
8.2 CreateFile的一个详细讨论 168
8.2.3 dwSharemode 169
8.2.1 lpFileName 169
8.2.2 dwDesiredAccess 169
8.2.4 lpSecurityAttributes 170
8.2.5 dwCreationDistribution 170
8.2.6 dwFlagsAndAttirbutes 170
8.2.7 hTemplateFile 171
8.3 读出和写入文件 172
8.4 目录和文件操作 175
8.5 文件锁定和解锁 175
8.6 长文件名 176
8.7 文件时间 176
8.8 其他文件信息 177
8.9 系统和卷信息 178
8.10 文件系统观察器样本程序 179
8.11 搜索文件 188
8.12 文件通知 189
8.13 目录监视样本程序 190
8.14 无名管道 199
8.15 无名管道样本程序 201
第九章 内存映像文件 209
9.1 什么是文件映射 210
9.2 内存映像文件观察器样本程序 212
9.3 一个文件的多个映像 218
9.4 在进程之间共享一个文件 220
9.5 关于文件映射的额外细节 222
9.6 在进程之间共享内存 223
9.7 共享内存样本程序 224
9.8 文件映射实际工作方式 229
10.1 调用DLL中的函数 232
第十章 DLL 232
10.2 DLL初始化 235
10.3 建立DLL 238
10.4 使用一个DLL共享数据 241
10.4.1 文件映射 241
10.4.2 直接共享变量 242
10.5 DLL的执行方式 243
10.6 DLL样本程序 243
第十一章 异常处理 260
11.1 什么是异常 260
11.2 异常处理 261
11.3 异常过滤器值 261
11.3.1 EXCEPTION_EXECUTE_HANDLER 262
11.3.2 EXCEPTION_CONTINUE_SEARCH 262
11.3.3 EXCEPTION_CONTINUE_EXECUTION 263
11.4 再论异常过滤器 264
11.5 使用try/except块的样本程序 267
11.6 终止处理 272
11.7 终止和异常处理 274
11.8 软件异常 275
11.9 异常处理样本程序 276
11.10 展开堆栈 285
11.11 没有处理的异常 285
11.12 异常和调试 286
11.13 C++和结构化异常处理 286
第十二章 客户-服务器应用程序与DDE 287
12.1 DDE定义 287
12.2 DDE与OLE之间的选择 287
12.3 DDE协议 288
12.4 服务器命名机制 289
12.5 回调函数 290
12.6 DDEML的初始化 291
12.7 字符串句柄和原子 294
12.8 事务 296
12.9 建立一次对话 298
12.10 DDE数据对象 302
12.11 从服务器中请求数据 304
12.12 发送数据给服务器 306
12.13 用最新的数据更新客户 309
12.13.1 初始化一个通知循环 309
12.13.2 从服务器中传输一个通知 310
12.13.3 终止一个通知循环 312
12.14 发送一个命令给服务器 313
12.15 同步事务和异步事务 315
12.16.1 应用程序的功能和操作 316
12.16 样本程序——一个人事搜索程序 316
12.16.2 程序结构 319
12.16.3 初始化和终止DDE通信 319
12.16.4 客户用户界面 320
12.16.5 文件操作 320
12.16.6 搜索程序员 321
12.16.7 管理编程工程 322
12.16.8 维护程序员数据库 323
12.16.9 计划变化的通知 323
12.16.10 调试服务器用户界面 325
12.16.11 程序设计注意点 326
第十三章 内部结构探秘 368
13.1 虚拟机结构 368
13.2 启动过程 372
13.3 驱动程序结构 373
13.4 异步输入模型 374
13.5 调度与优先级 376
13.5.1 优先级与优先类 377
13.5.2 在API级的优先级控制 377
13.5.3 调度器对优先级的控制 378
13.6 可靠性、强壮性和安全性 379
13.7 重入和Win16Mutex 382
13.8 Thunk 383
第十四章 其他编程考虑 386
14.1 国际化 386
14.1.1 字符集的问题 387
14.1.2 统一代码——一个更好的方法 388
14.1.3 统一代码与Windows NT 388
14.1.4 统一代码与Windows 95 389
14.2 即插即用 390
14.1.5 Windows 95平台 390
14.3 对象链接和嵌入 393
14.3.1 成分对象模型 393
14.3.2 成分对象 394
14.3.3 结构化存储 395
14.3.4 统一格式数据传输 396
14.3.5 OLE自动化 397
14.3.6 复合文档 398
14.3.7 原地激活 399
14.3.8 关于OLE的回顾 400
14.4 网络 401
14.4.1 网络编程接口 401
14.4.2 网络供应器接口 402
14.4.3 传输编程接口 402
14.4.4 设备驱动程序 403