第1章 背景知识 1
1.1 Win32的软硬件平台 1
1.1.1 80x86系列处理器简史 1
1.1.2 Windows的历史 3
1.1.3 Win32平台的背后——Wintel联盟 4
1.2 Windows的特色 5
1.3 必须了解的东西 6
1.3.1 80x86处理器的工作模式 6
1.3.2 Windows的内存管理 8
1.3.3 Windows的特权保护 15
第2章 准备编程环境 19
2.1 Win32可执行文件的开发过程 19
2.2 编译器和链接器 20
2.2.1 MASM系列 21
2.2.2 TASM系列 24
2.2.3 其他编译器 26
2.2.4 MASM,TASM还是NASM 27
2.2.5 我们的选择——MASM32软件包 28
2.3 创建资源 29
2.3.1 资源编译器的使用 29
2.3.2 所见即所得的资源编辑器 30
2.4 make工具的用法 32
2.4.1 make工具是什么 32
2.4.2 nmake的用法 33
2.4.3 描述文件的语法 34
2.5 获取资料 38
2.5.1 Windows资料的来源 38
2.5.2 Intel处理器资料 40
2.6 构建编程环境 40
2.6.1 IDE还是命令行 40
2.6.2 本书推荐的工作环境 41
2.6.3 尝试编译第一个程序 42
3.1 Win32汇编源程序的结构 44
第3章 使用MASM 44
3.1.1 模式定义 46
3.1.2 段的定义 48
3.1.3 程序结束和程序入口 51
3.1.4 注释和换行 51
3.2 调用API 52
3.2.1 API是什么 52
3.2.2 调用API 54
3.2.3 API参数中的等值定义 58
3.3 标号、变量和数据结构 60
3.3.1 标号 60
3.3.2 全局变量 61
3.3.3 局部变量 63
3.3.4 数据结构 66
3.3.5 变量的使用 68
3.4 使用子程序 73
3.4.1 子程序的定义 73
3.4.2 参数传递和堆栈平衡 74
3.5.1 条件测试语句 77
3.5 高级语法 77
3.5.2 分支语句 79
3.5.3 循环语句 81
3.6 代码风格 83
3.6.1 变量和函数的命名 83
3.6.2 代码的书写格式 85
3.6.3 代码的组织 87
4.1.1 窗口是什么 88
第4章 第一个窗口程序 88
4.1 开始了解窗口 88
4.1.2 窗口界面 89
4.1.3 窗口程序是怎么工作的 90
4.2 分析窗口程序 97
4.2.1 模块和句柄 97
4.2.2 创建窗口 99
4.2.3 消息循环 106
4.2.4 窗口过程 108
4.3 窗口间的消息互发 112
4.4 实验 116
4.4.1 MsgWindow程序 116
4.4.2 开始实验 120
第5章 使用资源 125
5.1 菜单和加速键 125
5.1.1 菜单和加速键的组成 125
5.1.2 菜单和加速键的资源定义 126
5.1.3 使用菜单和加速键 132
5.2 图标和光标 145
5.2.1 图标和光标的资源定义 145
5.2.2 使用图标和光标 146
5.3 位图 150
5.3.1 位图简介 150
5.3.2 在资源中定义位图 151
5.4.1 对话框简介 152
5.4 对话框 152
5.4.2 对话框的资源定义 154
5.4.3 使用对话框 156
5.4.4 在对话框中使用子窗口控件 159
5.5 字符串资源 183
5.6 版本信息资源 184
5.6.1 版本信息资源的定义 185
5.6.2 在程序中检测版本信息 188
5.7 二进制资源和自定义资源 189
5.7.1 使用二进制资源 189
5.7.2 使用自定义资源 190
第6章 定时器 192
6.1 定时器简介 192
6.2 定时器的使用 193
6.3 取Windows时间 197
7.1 GDI原理 199
7.1.1 GDI程序的结构 199
第7章 图形操作 199
7.1.2 设备环境 203
7.1.3 色彩和坐标 210
7.2 绘制图形 212
7.2.1 画笔和画刷 220
7.2.2 绘制像素点 223
7.2.3 绘制图形 224
7.2.4 绘图模式 228
7.3.1 一个使用位图的时钟例子 229
7.3 创建和使用位图 229
7.3.2 创建和使用位图 241
7.3.3 使用设备无关位图 242
7.4 块传送操作 245
7.4.1 块传送方式 245
7.4.2 块传送函数 246
7.5 区域和路径 250
7.5.1 使用区域 250
7.5.2 使用路径 252
8.1 通用对话框简介 254
第8章 通用对话框 254
8.2 使用通用对话框 262
8.2.1 “打开”文件和“保存”文件对话框 262
8.2.2 选择字体对话框 264
8.2.3 选择颜色对话框 266
8.2.4 查找和替换文本对话框 267
8.2.5 页面设置对话框 270
8.3.1 浏览目录对话框简介 272
8.3 浏览目录对话框 272
8.3.2 使用浏览目录对话框 277
第9章 通用控件 280
9.1 通用控件简介 280
9.1.1 通用控件的分类 280
9.1.2 使用通用控件 282
9.2 使用状态栏 286
9.2.1 创建状态栏 292
9.2.2 状态栏的控制消息 293
9.2.3 在状态栏上显示菜单提示信息 295
9.3 使用工具栏 296
9.3.1 创建工具栏 304
9.3.2 工具栏的控制消息 308
9.3.3 工具栏的通知消息 310
9.4 使用Richedit控件 314
9.4.1 创建Richedit控件 328
9.4.2 Richedit控件的控制消息 330
9.4.3 Richedit控件的通知消息 339
9.5 窗口的子类化 340
9.5.1 什么是窗口的子类化 340
9.5.2 窗口子类化的实现 341
9.6 控件的超类化 348
9.6.1 什么是控件的超类化 348
9.6.2 控件超类化的实现 348
10.1.1 内存管理基础 354
第10章 内存管理和文件操作 354
10.1 内存管理 354
10.1.2 内存的当前状态 355
10.1.3 标准内存管理函数 359
10.1.4 堆管理函数 368
10.1.5 虚拟内存管理函数 372
10.1.6 其他内存管理函数 376
10.2 文件操作 378
10.2.1 Windows的文件I/O 378
10.2.2 创建和读写文件 379
10.2.3 查找文件 394
10.2.4 文件属性 402
10.2.5 其他文件操作 404
10.3 驱动器和目录 405
10.3.1 逻辑驱动器操作 406
10.3.2 目录操作 409
10.4.1 内存映射文件简介 411
10.4 内存映射文件 411
10.4.2 使用内存映射文件 413
第11章 动态链接库和钩子 423
11.1 动态链接库 423
11.1.1 动态链接库的概念 423
11.1.2 编写动态链接库 424
11.1.3 使用动态链接库 429
11.1.4 动态链接库中的数据共享 437
11.2.1 什么是Windows钩子 439
11.2 Windows钩子 439
11.2.2 远程钩子的安装和使用 441
11.2.3 日志记录钩子 449
第12章 多线程 453
12.1 进程和线程 453
12.2 多线程编程 454
12.2.1 一个单线程的“问题程序” 454
12.2.2 多线程的解决方法 458
12.2.3 与线程有关的函数 463
12.3 使用事件对象控制线程 467
12.3.1 事件 468
12.3.2 等待事件 469
12.3.3 进一步改进计数程序 470
12.4 线程间的同步 473
12.4.1 产生同步问题的原因 473
12.4.2 临界区 478
13.1.1 环境变量 484
13.1 环境变量和命令行参数 484
第13章 进程控制 484
13.1.2 命令行参数 487
13.2 执行可执行文件 493
13.2.1 方法一:Shell调用 493
13.2.2 方法二:创建进程 494
13.3 进程调试 504
13.3.1 获取运行中的进程句柄 505
13.3.2 读写进程的地址空间 511
13.3.3 调试API的使用 516
13.4 进程的隐藏 526
13.4.1 在Windows9x中隐藏进程 526
13.4.2 WindowsNT中的远程线程 528
第14章 异常处理 540
14.1 异常处理的用途 540
14.2 使用筛选器处理异常 541
14.2.1 注册回调函数 541
14.2.2 异常处理回调函数 543
14.3 使用SEH处理异常 546
14.3.1 注册回调函数 548
14.3.2 异常处理回调函数 550
14.3.3 SEH链和异常的传递 554
14.3.4 展开操作(Unwinding) 555
第15章 注册表和INI文件 559
15.1 注册表和INI文件简介 559
15.2.1 INI文件的结构 560
15.2 INI文件的操作 560
15.2.2 管理键值 561
15.2.3 管理小节 570
15.2.4 使用不同的INI文件 571
15.3 对注册表的操作 572
15.3.1 注册表的结构 572
15.3.2 管理子键 574
15.3.3 管理键值 586
15.3.4 子键和键值的枚举 587
15.3.5 注册表应用举例 590
第16章 TCP/IP和网络通信 594
16.1 网络基础知识 594
16.1.1 TCP/IP协议 594
16.1.2 一些重要概念 598
16.2 WinSock接口 601
16.2.1 WinSock接口简介 601
16.2.2 WinSock编程概述 603
16.3.1 TCP协议简介 611
16.3 TCP协议编程 611
16.3.2 TCP聊天室例子——客户端 613
16.3.3 TCP聊天室例子——服务器端 624
16.4 UDP协议编程 632
16.4.1 UDP聊天室例子——客户端 633
16.4.2 UDP聊天室例子——服务器端 640
16.5 ICMP协议编程 646
16.5.1 题外话:控制台程序 647
16.5.2 ICMP协议 651
16.5.3 一个Ping程序例子 654
第17章 PE文件 667
17.1 PE文件的结构 667
17.1.1 概论 667
17.1.2 DOS文件头和DOS块 668
17.1.3 PE文件头(NT文件头) 670
17.1.4 节表和节 675
17.2.1 导入表简介 691
17.2 导入表 691
17.2.2 导入表的结构 693
17.2.3 查看PE文件导入表举例 696
17.3 导出表 699
17.3.1 导出表的结构 699
17.3.2 查看PE文件导出表举例 702
17.4 资源 706
17.4.1 资源简介 706
17.4.2 资源的组织方式 707
17.4.3 查看PE文件中的资源列表举例 710
17.5 重定位表 716
17.5.1 重定位表的结构 716
17.5.2 查看PE文件的重定位表举例 718
17.6 应用实例 721
17.6.1 动态获取API入口地址 721
17.6.2 在PE文件上添加执行代码 728
参考文献 736