译者序
前言
作者简介
第1章Windows初步1
1.1操作系统必备功能1
1.2Windows的演化2
1.3Windows版本2
1.3.1过时的Windows先前版本2
1.3.2Windows NT5和NT63
1.3.3处理器支持3
1.4Windows的市场角色3
1.5Windows、标准以及开放系统4
1.6Windows准则5
1.732位和64位源代码可移植性6
1.8标准C库:何时用它来处理文件7
1.9使用本书所需的条件7
1.9.1为什么使用C而不是C++7
1.9.2使用示例7
1.10示例:一个简单的顺序文件复制程序8
1.10.1使用C库的文件复制9
1.10.2使用Windows的文件复制11
1.10.3使用Windows便利函数的
文件复制12
1.11小结13
1.11.1前瞻14
1.11.2附加阅读14
1.12习题15
第2章使用Windows文件系统和
字符I/O16
2.1Windows文件系统16
2.2文件命名17
2.3文件的打开、读取、写入以及关闭17
2.3.1文件的创建和打开17
2.3.2关闭文件19
2.3.3读文件20
2.3.4写文件21
2.4Unicode和通用字符21
2.4.1另一种通用字符串处理函数22
2.4.2通用Main函数23
2.4.3函数定义23
2.5Unicode策略23
2.6示例:错误处理23
2.7标准设备25
2.8示例:将多个文件复制到标准输出26
2.9示例:简单的文件加密27
2.10文件和目录管理29
2.10.1文件管理29
2.10.2目录管理31
2.11控制台I/O32
2.12示例:打印和提示33
2.13示例:打印当前目录35
2.14小结36
2.14.1前瞻36
2.14.2附加阅读36
2.15习题36
第3章高级文件、目录处理与注册表38
3.164位文件系统38
3.2文件指针38
3.2.164位算术39
3.2.2使用重叠结构来指定文件位置40
3.3获得文件尺寸41
3.4示例:随机记录更新41
3.5文件属性和目录处理45
3.5.1路径名46
3.5.2其他用于获得文件和目录属性的方法46
3.5.3临时文件名47
3.6示例:列出文件属性47
3.7示例:设置文件时间50
3.8文件处理策略51
3.9文件锁52
3.9.1释放文件锁54
3.9.2锁逻辑的后果54
3.10注册表55
3.11注册表管理56
3.11.1项管理57
3.11.2值和数据管理58
3.12示例:列出注册表项及其内容59
3.13小结62
3.13.1前瞻62
3.13.2附加阅读62
3.14习题62
第4章异常处理64
4.1异常及其处理程序64
4.1.1Try和Except块64
4.1.2过滤表达式及其值66
4.1.3异常代码67
4.1.4小结:异常处理顺序68
4.2浮点异常69
4.3错误和异常70
4.4示例:以异常方式处理错误71
4.5终止处理程序72
4.5.1离开try块72
4.5.2非正常终止73
4.5.3执行并离开终止处理程序73
4.5.4组合finally和except块73
4.5.5全局和局部解开74
4.5.6终止处理程序:进程和线程
终止74
4.5.7SEH和C++异常处理74
4.6示例:使用终止处理程序来改进程序质量74
4.7示例:使用过滤函数77
4.8控制台控制处理程序79
4.9示例:一个控制台控制处理程序80
4.10向量化异常处理82
4.11小结82
4.12习题83
第5章内存管理、内存映射文件和DLL84
5.1Windows内存管理架构84
5.2堆86
5.3管理堆内存88
5.3.1HeapAlloc88
5.3.2HeapFree89
5.3.3HeapReAlloc89
5.3.4HeapSize89
5.3.5更多关于序列化与异常标志的信息90
5.3.6其他堆函数90
5.3.7小结:堆管理91
5.4示例:使用二叉搜索树对文件进行排序91
5.5内存映射文件95
5.5.1文件映射对象96
5.5.2将对象映射到进程地址空间97
5.5.3文件映射的限制99
5.5.4小结:文件映射100
5.6示例:使用映射文件进行顺序文件处理100
5.7示例:对内存映射文件排序102
5.8基指针104
5.9示例:使用基指针104
5.10动态链接库108
5.10.1静态库和动态库108
5.10.2隐式链接109
5.10.3显式链接111
5.11示例:显式链接文件转换函数112
5.12DLL进入点113
5.13DLL版本管理114
5.14小结115
5.14.1前瞻115
5.14.2附加阅读115
5.15习题115
第6章进程管理117
6.1Windows进程和线程117
6.2进程创建118
6.2.1指定可执行映像和命令行120
6.2.2可继承句柄121
6.3进程标识122
6.4复制句柄123
6.5进程的退出与终止124
6.6等待进程终止125
6.7环境块和字符串125
6.8示例:并行模式搜索126
6.9多处理器环境中的进程129
6.10进程执行时间130
6.11示例:进程执行时间130
6.12生成控制台控制事件131
6.13示例:简单的作业管理132
6.13.1创建一个后台作业132
6.13.2获取作业号135
6.13.3列出背景作业136
6.13.4在作业清单文件中查找作业137
6.13.5作业对象138
6.14示例:使用作业对象139
6.15小结142
6.16习题142
第7章线程和调度144
7.1线程概述144
7.2线程基础145
7.3线程管理146
7.3.1CreateThread146
7.3.2ExitThread147
7.3.3GetExitCodeThread147
7.3.4线程标识147
7.3.5更多线程管理函数147
7.3.6挂起以及恢复线程148
7.3.7等待线程终止148
7.4在线程中使用C库148
7.5示例:多线程的模式搜索149
7.6性能影响152
7.7老板/工人和其他线程模型152
7.8示例:合并排序——利用多处理器152
7.9程序并行性简介157
7.10线程本地存储158
7.11进程和线程优先级以及调度159
7.12线程状态160
7.13陷阱和常见错误162
7.14计时等待163
7.15纤程163
7.16小结165
7.16.1前瞻165
7.16.2附加阅读165
7.17习题165
第8章线程同步167
8.1线程同步之需167
8.1.1临界代码区域168
8.1.2临界代码区域问题的有瑕疵的解决方案168
8.1.3volatile存储169
8.1.4内存架构和内存屏障169
8.1.5互锁函数:介绍171
8.1.6局部和全局存储171
8.1.7小结:线程安全的代码172
8.2线程同步对象173
8.3CRITICAL_SECTION对象173
8.4用于保护共享变量的CRITICAL_SECTION174
8.5示例:一个简单的生产者/消费者系统176
8.6互斥量180
8.6.1被放弃的互斥量181
8.6.2互斥量、CRITICAL_SECTION以及死锁181
8.6.3复习:互斥量与CRITICAL_SECTION对比183
8.6.4堆锁183
8.7信号量183
8.7.1使用信号量184
8.7.2信号量的限制184
8.8事件185
8.9示例:一个生产者/消费者系统187
8.9.1复习:Windows同步对象189
8.9.2消息和对象等待190
8.10更多互斥量和CRITICAL_SECTION的指导原则190
8.11更多互锁函数191
8.12内存管理性能的考虑192
8.13小结192
8.13.1前瞻192
8.13.2附加阅读192
8.14 习题192
第9章 锁、性能以及NT6增强194
9.1 同步性能影响194
9.2 用于性能试验的模型程序197
9.3 使用CS自旋数来调整多处理器性能198
9.4 NT6轻量级读/写锁199
9.5 减少线程竞争的线程池200
9.6 I/O完成端口202
9.7 NT6线程池203
9.7.1 CreateThreadpoolWork 203
9.7.2 SubmitThreadpoolWork 204
9.7.3 WaitForThreadpoolWork-Callbacks 204
9.7.4 CloseThreadpoolWork 204
9.7.5 回调函数204
9.7.6 将回调提交给线程池207
9.7.7 线程池环境207
9.7.8 进程线程池207
9.7.9 其他线程池回调类型208
9.8 小结:锁性能208
9.9 再论并行性208
9.9.1 更好的基础以及扩展中的并行程序技术209
9.9.2 并行编程的可选方法209
9.9.3 并行性框架209
9.9.4 不要忘了挑战的存在210
9.10 处理器亲和性210
9.10.1 系统、进程与线程亲和性掩码211
9.10.2 查找处理器数量212
9.11 性能指导原则和陷阱212
9.12 小结213
9.12.1 前瞻213
9.12.2 附加阅读213
9.13 习题213
第10章 高级线程同步215
10.1 条件变量模型和安全性能215
10.1.1 一起使用事件和互斥量215
10.1.2 条件变量模型216
10.1.3 条件变量模型的使用218
10.2 使用SignalObjectAndWait219
10.3 示例:阀值屏障对象220
10.4 队列对象223
10.5 示例:在多阶段管线中使用队列226
10.6 Windows NT6条件变量233
10.7 异步过程调用236
10.8 异步过程调用的排队236
10.9 可报警的等待状态237
10.10 安全的线程取消239
10.11 为了应用程序的可移植而使用Pthreads239
10.12 线程堆栈和线程数239
10.13 关于设计、调试和测试的提示240
10.14 Windows API之外241
10.15 小结241
10.15.1 前瞻242
10.15.2 附加阅读242
10.16 习题242
第11章 进程间通信244
11.1 匿名管道244
11.2 示例:使用匿名管道进行I/O重定向245
11.3 命名管道247
11.3.1 使用命名管道248
11.3.2 创建命名管道248
11.3.3 命名管道客户连接249
11.3.4 命名管道状态函数250
11.3.5 命名管道连接函数250
11.3.6 客户和服务器的命名管道连接250
11.4 命名管道事务函数251
11.5 示例:客户/服务器命令行处理程序253
11.6 关于客户/服务器命令行处理程序的注释258
11.7 邮槽259
11.7.1 使用邮槽260
11.7.2 创建和打开邮槽260
11.8 管道和邮槽的创建、连接和命名261
11.9 示例:客户可定位的服务器262
11.10 小结264
11.11 习题264
第12章 使用Windows套接字进行网络编程265
12.1 Windows套接字265
12.1.1 Winsock初始化266
12.1.2 创建套接字266
12.2 套接字服务器函数267
12.2.1 绑定套接字267
12.2.2 将绑定的套接字置于侦听状态268
12.2.3 接受客户连接268
12.2.4 断开以及关闭套接字268
12.2.5 示例:准备并接受客户连接269
12.3 套接字客户函数270
12.3.1 连接服务器270
12.3.2 示例:客户连接服务器270
12.3.3 发送和接收数据270
12.4 命名管道和套接字之对比271
12.4.1 命名管道与套接字服务器之比较271
12.4.2 命名管道与套接字客户之比较271
12.5 示例:套接字消息接收函数271
12.6 示例:基于套接字的客户272
12.7 示例:基于套接字的、带有新特性的服务器274
12.7.1 主程序275
12.7.2 服务器线程278
12.7.3 运行套接字服务器279
12.7.4 安全注释280
12.8 进程内服务器280
12.9 面向行的消息、DLL进入点以及TLS282
12.10 示例:线程安全的套接字消息DLL283
12.11 示例:另一种线程安全的DLL策略286
12.12 数据报289
12.12.1 数据报广播289
12.12.2 使用数据报进行远程过程调用289
12.13 Berkeley套接字和Windows套接字的比较290
12.14 Windows套接字使用重叠I/O290
12.15 Windows套接字的额外特性290
12.16 小结290
12.16.1 前瞻290
12.16.2 附加阅读291
12.17 习题291
第13章 Windows服务293
13.1 概述:编写Windows服务293
13.2 main()函数294
13.3 ServiceMain()函数294
13.3.1 注册服务控制处理程序295
13.3.2 设置服务状态295
13.3.3 SERVICE_STATUS结构296
13.3.4 服务特定的代码297
13.4 服务控制处理程序297
13.5 事件记录298
13.6 示例:服务“包装器”298
13.7 管理Windows服务302
13.7.1 打开SCM303
13.7.2 创建和删除服务303
13.7.3 启动服务304
13.7.4 控制服务304
13.7.5 查询服务状态305
13.7.6 小结:服务操作和管理305
13.8 示例:服务控制Shell305
13.9 与服务共享内核对象309
13.10 调试服务时的注意事项309
13.11 小结310
13.11.1 前瞻310
13.11.2 附加阅读310
13.12 习题310
第14章 异步输入/输出与完成端口311
14.1 Windows异步I/O概述311
14.2 重叠I/O312
14.2.1 重叠I/O的后果312
14.2.2 重叠结构313
14.2.3 重叠I/O状态313
14.2.4 取消重叠I/O操作314
14.3 示例:在一个文件句柄之上同步314
14.4 示例:使用重叠I/O和多缓冲区进行文件转换315
14.5 使用完成例程的扩展I/O318
14.5.1 ReadFileEx、WriteFileEx和完成例程318
14.5.2 可报警的等待函数319
14.5.3 完成例程的执行和可报警等待的返回320
14.6 示例:使用扩展I/O的文件转换321
14.7 使用线程的异步I/O324
14.8 可等待定时器324
14.9 示例:使用可等待定时器325
14.9.1 可等待定时器示例的注释327
14.9.2 线程池定时器327
14.10 I/O完成端口327
14.10.1 管理I/O完成端口328
14.10.2 等待I/O完成端口328
14.10.3 邮发给I/O完成端口329
14.10.4 I/O完成端口的替代329
14.11 示例:使用I/O完成端口的服务器329
14.12 小结335
14.13 习题335
第15章 Windows对象的安全337
15.1 安全属性337
15.2 安全性概述:安全描述符338
15.2.1 访问控制列表338
15.2.2 使用Windows对象安全性339
15.2.3 对象权限和对象访问339
15.2.4 安全描述符初始化339
15.3 安全描述符控制标志339
15.4 安全标识符340
15.5 管理ACL341
15.6 示例:NTFS文件的UNIX风格的权限342
15.7 示例:初始化安全属性345
15.8 安全描述符的读与更改347
15.9 示例:读取文件权限349
15.10 示例:更改文件权限350
15.11 给内核和通信对象施加安全350
15.11.1 给命名管道施加安全350
15.11.2 内核与私有对象的安全性351
15.11.3 ACE掩码值351
15.12 示例:给进程及其线程施加安全352
15.13 其他安全特性的概述352
15.13.1 移除ACE352
15.13.2 绝对的和自相关的安全描述符352
15.13.3 系统ACL352
15.13.4 访问令牌信息353
15.13.5 SID管理353
15.14 小结353
15.14.1 前瞻353
15.14.2 附加阅读353
15.15 习题353
附录A 使用示例程序355
附录B 源代码可移植性:Windows、UNIX和Linux357
附录C 性能结果370
参考文献379
· · · · · · (
收起)