标题：Windows程序设计(第2版)
        内容提要        

本书编写的目的是为学习Windows编程的读者提供一个良好的学习方法，循序渐进，最终使他们有能力独立开发出像Windows防火墙一样复杂的应用程序。本书首先介绍了Win32程序运行原理和最基本的Win32API编程；然后通过模拟MFC中关键类、全局函数和宏定义的实现，详细讲述了框架程序的设计方法和MFC的内部工作机制，并指出了这些机制是如何对用户程序造成影响的；完整讲述了开发内核驱动和Windows防火墙的过程；最后给出图像处理的基本开发方法。
        编辑推荐        

本书从“Hello，World”这个简单的例子出发，通过多个实例，由浅入深地讲述Win32API程序设计、类库框架设计、MFC程序设计、内核模式程序设计等，使读者在实践中熟练掌握Windows程序设计模式，并有能力写出完成特定功能的用户应用程序和简单的内核驱动程序。全书语言严谨流畅，针对初学者的特点，精心策划、由浅到深，是学习Windows编程的理想书籍。
        目录        

第1章　Windows程序设计基础　1
1.1　必须了解的内容　1
1.1.1　Windows产品概述　1
1.1.2　开发工具VisualC++　1
1.1.3　Windows资料来源——MSDN　2
1.1.4　Win32API简介　2
1.2　VC++的基本使用　2
1.2.1　应用程序的类型　3
1.2.2　第一个控制台应用程序　3
1.2.3　API函数的调用方法　4
1.3　本书推荐的编程环境　5
1.4　代码的风格　6
1.4.1　变量的命名　6
1.4.2　代码的对齐方式　7
1.4.3　代码的注释　8
第2章　Win32程序运行原理　9
2.1　CPU的保护模式和Windows系统　9
2.1.1　Windows的多任务实现　9
2.1.2　虚拟内存　9
2.1.3　内核模式和用户模式　10
2.2　内核对象　11
2.2.1　内核对象的引出　11
2.2.2　对象句柄　12
2.2.3　使用计数　12
2.3　进程的创建　12
2.3.1　进程(Process)和线程(Thread)　12
2.3.2　应用程序的启动过程　13
2.3.3　CreateProcess函数　14
2.3.4　创建进程的例子　17
2.4　进程控制　18
2.4.1　获取系统进程　18
2.4.2　终止当前进程　20
2.4.3　终止其他进程　21
2.4.4　保护进程　22
2.5　【实例】游戏内存修改器　23
2.5.1　实现原理　23
2.5.2　编写测试程序　25
2.5.3　搜索内存　25
2.5.4　写进程空间　28
2.5.5　提炼接口　28
第3章　Win32程序的执行单元　30
3.1　多线程　30
3.1.1　线程的创建　30
3.1.2　线程内核对象　33
3.1.3　线程的终止　36
3.1.4　线程的优先级　37
3.1.5　C/C++运行期库　40
3.2线程同步　41
3.2.1　临界区对象　41
3.2.2　互锁函数　44
3.2.3　事件内核对象　45
3.2.4　信号量内核对象　47
3.2.5　互斥内核对象　50
3.2.6　线程局部存储　52
3.3　设计自己的线程局部存储　55
3.3.1　CSimpleList类　56
3.3.2　CNoTrackObject类　61
3.3.3　CThreadSlotData类　63
3.3.4　CThreadLocal类模板　72
3.4　设计线程类——CWinThread　76
3.5　【实例】多线程文件搜索器　85
3.5.1　搜索文件的基本知识　85
3.5.2　编程思路　87
第4章　Windows图形界面　94
4.1　了解窗口　94
4.2　第一个窗口程序　95
4.2.1　创建Win32工程和MessageBox函数　95
4.2.2　Windows的消息驱动　97
4.2.3　创建窗口　98
4.2.4　分析主程序代码　100
4.2.5　处理消息的代码　104
4.3　一个“简陋”的打字程序　106
4.3.1　使用资源　106
4.3.2　菜单和图标　108
4.3.3　接收键盘输入　109
4.3.4　接收鼠标输入　112
4.3.5　设置文本颜色和背景色　113
4.4　GDI基本图形　113
4.4.1　设备环境　113
4.4.2　Windows的颜色和像素点　116
4.4.3　绘制线条　117
4.4.4　绘制区域　121
4.4.5　坐标系统　122
4.5　Windows内存DC　126
4.6　【实例】小时钟　127
4.6.1　基础知识——定时器和系统时间　127
4.6.2　时钟程序　130
4.6.3　移动窗口　134
4.6.4　使用快捷菜单　135
第5章　框架管理基础　139
5.1　运行时类信息(CRuntimeClass类)　139
5.1.1　动态类型识别和动态创建　139
5.1.2　DECLARE_DYNAMIC等宏的定义　144
5.2　调试支持　146
5.2.1　基本调试方法　146
5.2.2　调试输出　147
5.2.3　跟踪和断言　148
5.3　框架程序中的映射　149
5.3.1　映射的概念　149
5.3.2　内存分配方式　150
5.3.3　设计管理方式　153
5.3.4　句柄映射的实现　160
5.4　框架程序的状态信息　161
5.4.1　模块的概念　161
5.4.2　模块、线程的状态　162
5.5　框架程序的执行顺序　164
5.5.1　线程的生命周期　164
5.5.2　程序的初始化过程　167
5.5.3　框架程序应用举例　170
第6章　框架中的窗口　171
6.1　CWnd类的引出　171
6.2　窗口句柄映射　172
6.2.1　向CWnd对象分发消息　172
6.2.2　消息的传递方式　175
6.3　创建窗口　177
6.3.1　窗口函数　177
6.3.2　注册窗口类　178
6.3.3　消息钩子　180
6.3.4　最终实现　185
6.3.5　创建窗口的例子　187
6.4　消息映射　189
6.4.1　消息映射表　189
6.4.2　DECLARE_MESSAGE_MAP等宏的定义　192
6.5　消息处理　194
6.5.1　使用消息映射宏　194
6.5.2　消息的分发机制　197
6.5.3　消息映射应用举例　200
6.6　使用Microsoft基础类库　204
6.7　【实例】窗口查看器　206
6.7.1　窗口界面　206
6.7.2　获取目标窗口的信息　211
6.7.3　自制按钮　215
第7章　用户界面设计　219
7.1　对话框与子窗口控件基础　219
7.1.1　子窗口控件运行原理　219
7.1.2　对话框工作原理　222
7.2　使用对话框和控件与用户交互　224
7.2.1　以对话框为主界面的应用程序　224
7.2.2　常用子窗口控件　228
7.2.3　对话框与控件的颜色　229
7.3　通用控件　230
7.3.1　通用控件简介　230
7.3.2　使用通用控件　231
7.3.3　使用状态栏　235
7.3.4　使用列表视图　238
7.3.5　使用进度条　239
7.4　通用对话框　241
7.4.1　“打开”文件和“保存”文件对话框　241
7.4.2　浏览目录对话框　243
7.5　使用框架程序简化界面开发　245
7.5.1　在框架程序中使用对话框　245
7.5.2　CDialog类　248
7.5.3　框架程序中的控件　250
7.5.4　使用向导　250
7.6　【实例】目录监视器　252
7.6.1　目录监视的基础知识　253
7.6.2　实例程序　253
7.6.3　使用SkinMagic美化界面　259
7.7　窗口进程监视器　261
第8章　Windows文件操作和内存映射文件　264
8.1　文件操作　264
8.1.1　创建和读写文件　264
8.1.2　获取文件信息　268
8.1.3　常用文件操作　270
8.1.4　检查PE文件有效性的例子　272
8.1.5　MFC的支持(CFile类)　274
8.2　驱动器和目录　276
8.2.1　驱动器操作　276
8.2.2　目录操作　279
8.3　使用注册表　279
8.3.1　注册表的结构　279
8.3.2　管理注册表　280
8.3.3　注册表API应用举例(设置开机自动启动)　282
8.3.4　ATL库的支持(CRegKey类)　283
8.4　内存映射文件　284
8.4.1　内存映射文件相关函数　284
8.4.2　使用内存映射文件读BMP文件的例子　286
8.4.3　进程间共享内存　292
8.4.4　封装共享内存类CShareMemory　294
8.5　一个文件切割系统的实现　295
8.5.1　通信机制　295
8.5.2　分割合并机制　296
8.5.3　接口函数　300
8.5.4　最终实现　301
8.6　【实例】文件切割器开发实例　306
第9章　动态链接库和钩子　314
9.1　动态链接库　314
9.1.1　动态链接库的概念　314
9.1.2　创建动态链接库工程　314
9.1.3　动态链接库中的函数　316
9.1.4　使用导出函数　317
9.2　Windows钩子　320
9.2.1　钩子的概念　320
9.2.2　钩子的安装与卸载　320
9.2.3　键盘钩子实例　322
9.3　挂钩API技术(HOOKAPI)　327
9.3.1　实现原理　327
9.3.2　使用钩子注入DLL　327
9.3.3　HOOK过程　328
9.3.4　封装CAPIHook类　333
9.3.5　HOOK实例——进程保护器　340
9.4　其他常用的侦测方法　344
9.4.1　使用注册表注入DLL　344
9.4.2　使用远程线程注入DLL　345
9.4.3　通过覆盖代码挂钩API　351
9.5　【实例】用户模式下侦测Win32API的例子　354
第10章　TCP/IP和网络通信　359
10.1　网络基础知识　359
10.1.1　TCP/IP参考模型　359
10.1.2　以太网　361
10.1.3　以太网接口堆栈　363
10.1.4　服务器/客户机模型　363
10.2　Winsock接口　364
10.2.1　套节字的概念和类型　364
10.2.2　Winsock的寻址方式和字节顺序　364
10.2.3　Winsock编程流程　366
10.2.4　典型过程图　371
10.2.5　服务器和客户方程序举例　371
10.2.6　UDP协议编程　374
10.3　网络程序实际应用　374
10.3.1　设置I/O模式　375
10.3.2　TCP服务器实例　376
10.3.3　TCP客户端实例　384
10.4　截拦网络数据　388
10.4.1　DLL工程框架　388
10.4.2　数据交换机制　389
10.4.3　数据的过滤　391
10.5　【实例】IP封包截获工具IPPack源代码分析　392
10.5.1　主窗口界面　392
10.5.2　注入DLL　395
10.5.3　处理封包　399
第11章　内核模式程序设计与Windows防火墙开发　403
11.1　Windows操作系统的体系结构　403
11.1.1　Windows2000/XP组件结构图　403
11.1.2　环境子系统和子系统DLL　404
11.1.3　系统核心　405
11.1.4　设备驱动程序　408
11.2　服务　408
11.2.1　服务控制管理器(ServiceControlManager)　408
11.2.2　服务控制程序　409
11.2.3　封装CDriver类　412
11.3　开发内核驱动的准备工作　417
11.3.1　驱动程序开发工具箱　417
11.3.2　编译和连接内核模式驱动的方法　417
11.3.3　创建第一个驱动程序　418
11.4　内核模式程序设计基础知识　418
11.4.1　UNICODE字符串　418
11.4.2　设备对象　419
11.4.3　驱动程序的基本组成　420
11.4.4　I/O请求包和I/O堆栈　420
11.4.5　完整驱动程序　423
11.5　内核模式与用户模式交互　426
11.5.1　扩展派遣接口　426
11.5.2　IOCTL应用举例　427
11.6　IP过滤钩子驱动　431
11.6.1　创建过滤钩子(Filter-hook)驱动　431
11.6.2　IP过滤钩子驱动工程框架　434
11.6.3　过滤列表　437
11.6.4　编写过滤函数　438
11.6.5　注册钩子回调函数　440
11.6.6　处理IOCTL设备控制代码　442
11.7　【实例】防火墙开发实例　443
11.7.1　文档视图　443
11.7.2　文档对象　446
11.7.3　视图对象　448
11.7.4　主窗口对象　450
第12章　Windows数字图像处理　454
12.1　编程基础　454
12.2　CVector2D类　455
12.3　CGray类的设计　458
12.3.1　图像的加载和保存　460
12.3.2　创建新位图　464
12.3.3　设置和获取位图像素值　466
12.3.4　绘制矩形和直线　470
……