《Windows系统编程 原书第4版》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:(美)哈特著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2010
  • ISBN:9787111316688
  • 页数:381 页
图书介绍:本书重点突出,是Windows API核心特性和功能的实践指导材料。不像许多其他Windows编程资源,本书着重探讨Windows核心系统服务,如文件系统、内存、进程和线程、同步、通信以及安全性,新修订版中涵盖了新的API函数、网络编程、Windows服务、进程和线程管理、同步以及单处理器和多处理器的程序性能,同时还描述了如何向Win64移植程序。本书尤其适合那些已经熟悉UNIX或者其他高端操作系统的读者,阅读本书还有助于丰富知识,快速而轻松地学习许多重要特性。 本书新版包含了对64位编程、并行开发、多核系统以及众多关键主题的扩展。作者的健壮的代码示例已经彻底更新。针对32位和64位版本分别调试,在单核系统和多核系统上,并且针对Windows 7、Vista和Server 2008、Windows XP等多个版本。

第1章Windows初步 1

1.1操作系统必备功能 1

1.2 Windows的演化 2

1.3 Windows版本 2

1.3.1过时的Windows先前版本 2

1.3.2 Windows NT5和NT6 3

1.3.3处理器支持 3

1.4 Windows的市场角色 3

1.5 Windows、标准以及开放系统 4

1.6 Windows准则 5

1.7 32位和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/O 16

2.1 Windows文件系统 16

2.2文件命名 17

2.3文件的打开、读取、写入以及关闭 17

2.3.1文件的创建和打开 17

2.3.2关闭文件 19

2.3.3读文件 20

2.3.4写文件 21

2.4 Unicode和通用字符 21

2.4.1另一种通用字符串处理函数 22

2.4.2通用Main函数 23

2.4.3函数定义 23

2.5 Unicode策略 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/O 32

2.12示例:打印和提示 33

2.13示例:打印当前目录 35

2.14小结 36

2.14.1前瞻 36

2.14.2附加阅读 36

2.15习题 36

第3章 高级文件、目录处理与注册表 38

3.1 64位文件系统 38

3.2文件指针 38

3.2.1 64位算术 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章 异常处理 62

4.1异常及其处理程序 64

4.1.1 Try和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.7 SEH和C++异常处理 74

4.6示例:使用终止处理程序来改进程序质量 74

4.7示例:使用过滤函数 77

4.8控制台控制处理程序 79

4.9示例:一个控制台控制处理程序 80

4.10向量化异常处理 82

4.11小结 82

4.12习题 83

第5章 内存管理、内存映射文件和DLL 84

5.1 Windows内存管理架构 84

5.2堆 86

5.3管理堆内存 88

5.3.1 HeapAlloc 88

5.3.2 HeapFree 89

5.3.3 HeapReAlloc 89

5.3.4 HeapSize 89

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.12 DLL进入点 113

5.13 DLL版本管理 114

5.14小结 115

5.14.1前瞻 115

5.14.2附加阅读 115

5.15习题 115

第6章 进程管理 117

6.1 Windows进程和线程 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.1 CreateThread 146

7.3.2 ExitThread 147

7.3.3 GetExitCodeThread 147

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.3 volatile存储 169

8.1.4内存架构和内存屏障 169

8.1.5互锁函数:介绍 171

8.1.6局部和全局存储 171

8.1.7小结:线程安全的代码 172

8.2线程同步对象 173

8.3 CRITICAL_SECTION对象 173

8.4用于保护共享变量的CRITCAL_SECTION 174

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 1/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使用SignalObjectAndWait 219

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为了应用程序的可移植而使用Pthreads 239

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进入点以及TLS 282

12.10示例:线程安全的套接字消息DLL 283

12.11示例:另一种线程安全的DLL策略 286

12.12数据报 289

12.12.1数据报广播 289

12.12.2使用数据报进行远程过程调用 289

12.13 Berkeley套接字和Windows套接字的比较 290

12.14 Windows套接字使用重叠I/O 290

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打开SCM 303

13.7.2创建和删除服务 303

13.7.3启动服务 304

13.7.4控制服务 304

13.7.5查询服务状态 305

13.7.6小结:服务操作和管理 305

13.8示例:服务控制Shell 305

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/O 312

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/O 318

14.5.1 ReadFileEx、 WriteFileEx和完成例程 318

14.5.2可报警的等待函数 319

14.5.3完成例程的执行和可报警等待的返回 320

14.6示例:使用扩展I/O的文件转换 321

14.7使用线程的异步I/O 324

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 1/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管理ACL 341

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移除ACE 352

15.13.2绝对的和自相关的安全描述符 352

15.13.3系统ACL 352

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和Linux 357

附录C性能结果 370

参考文献 379