Windows核心编程(第5版 中文限量版)
1星价
¥153.6
(6.0折)
2星价¥153.6
定价¥256.0
图文详情
- ISBN:9787302609322
- 装帧:一般胶版纸
- 册数:暂无
- 重量:暂无
- 开本:其他
- 页数:868
- 出版时间:2022-10-01
- 条形码:9787302609322 ; 978-7-302-60932-2
本书特色
为特别响应广大忠实读者的需求,荣获“中国书刊协会全行业畅销书”称号的《Windows核心编程》低调推出了中文限量版。
全新亮相的《Windows核心编程》(第5版 中文限量版)一共包含5卷,分别采用5大具有典型国风的色彩作为区分。
为了满足不同年龄段的读者多层次的阅读需求,为了帮助读者化整为零,化繁为简,为了尽可能营造出“慢读”的意境,从而帮助读者更容易进入心流并落实四到:眼到、心到、脑到和手到,《Windows核心编程》更是在内容和视觉上也进行了精心的设计、更新和修订。当然,重中之重仍然是更准确无误的内容。
内容简介
《Windows核心编程(第5版 中文限量版)》是一本经典的Windows核心编程指南,从第1版到第5版,引领着数十万程序员走入Windows开发阵营,培养了大批精英。
作为Windows开发人员的推荐参考,《Windows核心编程(第5版 中文限量版)》是为打算理解Windows的C和C++程序员精心设计的。第5版全面覆盖Windows XP,Windows Vista和Windows Server 2008中的170个新增函数和Windows特性。书中还讲解了Windows系统如何使用这些特性,我们开发的应用程序又如何充分使用这些特性,如何自行创建新的特性。
目录
第I 部分 必 备 知 识
第1 章 错误处理 3
第2 章 字符和字符串处理 11
第3 章 内核对象 35
第II 部分 工 作 机 理
第4 章 进程 75
第5 章 作业 139
第6 章 线程基础 161
第7 章 线程调度、优先级和亲和性 191
第8 章 用户模式下的线程同步 231
第9 章 用内核对象进行线程同步 271
第10 章 同步和异步设备I/O 325
第11 章 Windows 线程池 381
第12 章 纤程 407
第III 部分 内 存 管 理
第13 章 Windows 内存架构 417
第14 章 探索虚拟内存 443
第15 章 在应用程序中使用虚拟内存 469
第16 章 线程栈 505
第17 章 内存映射文件 519
第18 章 堆 581
第IV 部分 动态链接库
第19 章 DLL 基础 601
第20 章DLL 高级技术 619
第21 章 线程局部存储 667
第22 章 DLL 注入和API 拦截 675
第V 部分 结构化异常处理
第23 章 终止处理程序 739
第24 章 异常处理程序与软件异常 761
第25 章 未处理异常、向量化异常处理与C 异常 791
第26 章 错误报告与应用程序恢复 821
附 录
附录A 生成环境 851
附录B 消息处理宏、子控件宏和API 宏 865
索引 871
详细目录
第I 部分 必 备 知 识
第1 章 错误处理 3
1.1 定义自己的错误码 7
1.2 ErrorShow 示例程序 8
第2 章 字符和字符串处理 11
2.1 字符编码 12
2.2 ANSI 字符和Unicode 字符与字符串数据类型 14
2.3 Windows 中的Unicode 和ANSI 函数 16
2.4 C 运行库中的Unicode 函数和ANSI 函数 19
2.5 C 运行库中的安全字符串函数 19
2.4.1 初识新的安全字符串函数 20
2.4.2 字符串处理时如何获得更多控制 24
2.4.3 Windows 字符串函数 26
2.6 为何要用Unicode 27
2.7 推荐的字符和字符串处理方式 28
2.8 Unicode 与ANSI 字符串转换 29
2.8.1 导出ANSI 和Unicode DLL 函数 31
2.8.2 判断文本是ANSI 还是Unicode 33
第3 章 内核对象 35
3.1 何为内核对象 35
3.1.1 使用计数 37
3.1.2 安全性 37
3.2 进程的内核对象句柄表 40
3.2.1 创建内核对象 41
3.2.2 关闭内核对象 43
3.3 跨进程边界共享内核对象 46
3.3.1 使用对象句柄继承 46
3.3.2 改变句柄的标志 50
3.3.3 为对象命名 51
3.3.4 终端服务命名空间 56
3.3.5 专有命名空间 57
3.3.6 复制对象句柄 66
第II 部分 工 作 机 理
第4 章 进程 75
4.1 编写**个Windows 应用程序 76
4.1.1 进程实例句柄 81
4.1.2 进程前一个实例的句柄 84
4.1.3 进程的命令行 84
4.1.4 进程的环境变量 86
4.1.5 进程的亲和性 92
4.1.6 进程的错误模式 92
4.1.7 进程当前所在的驱动器和目录 93
4.1.8 进程的当前目录 94
4.1.9 系统版本 95
4.2 CreateProcess 函数 99
4.2.1 pszApplicationName 参数和pszCommandLine 参数 99
4.2.2 参数psaProcess,psaThread 和bInheritHandles 101
4.2.3 fdwCreate 参数 104
4.2.4 pvEnvironment 参数 106
4.2.5 pszCurDir 参数 106
4.2.6 psiStartInfo 参数 106
4.2.7 ppiProcInfo 参数 113
4.3 终止进程 116
4.3.1 主线程的入口点函数返回 116
4.3.2 ExitProcess 函数 116
4.3.3 TerminateProcess 函数 118
4.3.4 当进程中的所有线程终止时 119
4.3.5 当进程终止运行时 119
4.4 子进程 120
4.5 管理员以标准用户权限运行 122
4.5.1 自动提升进程权限 126
4.5.2 手动提升进程权限 127
4.5.3 何为当前权限上下文 129
4.5.4 枚举系统中正在运行的进程 131
4.5.5 Process Information 示例程序 132
第5 章 作业 139
5.1 对作业中的进程施加限制 144
5.2 将进程放入作业中 151
5.3 终止作业中的所有线程 152
5.4 作业通知 156
5.5 Job Lab 示例程序 158
第6 章 线程基础 161
6.1 何时创建线程 162
6.2 何时不应该创建线程 164
6.3 编写**个线程函数 165
6.4 CreateThread 函数 166
6.4.1 psa 参数 167
6.4.2 cbStackSize 参数 167
6.4.3 pfnStartAddr 参数和pvParam 参数 168
6.4.4 dwCreateFlags 参数 169
6.4.5 pdwThreadID 参数 169
6.5 终止运行线程 170
6.5.1 线程函数返回 170
6.5.2 ExitThread 函数 170
6.5.3 TerminateThread 函数 171
6.5.4 进程终止运行时 171
6.5.5 线程终止运行时 172
6.6 线程内幕 173
6.7 C/C 运行库注意事项 175
6.7.1 用_beginthreadex 而不要用CreateThread 创建线程 185
6.7.2 绝对不应该调用的C/C 运行库函数 186
6.8 了解自己的身份 187
第7 章 线程调度、优先级和亲和性 191
7.1 线程的挂起和恢复 193
7.2 进程的挂起和恢复 194
7.3 睡眠 196
7.4 切换到另一个线程 196
7.5 在超线程CPU 上切换到另一个线程 197
7.6 线程的执行时间 197
7.7 在实际上下文中谈CONTEXT 结构 202
7.8 线程优先级 207
7.9 从抽象角度看优先级 208
7.10 优先级编程 211
7.10.1 动态提升线程优先级 214
7.10.2 为前台进程调整调度程序 216
7.10.3 调度I/O 请求优先级 216
7.10.4 Scheduling Lab 示例程序 218
7.11 亲和性 224
第8 章 用户模式下的线程同步 231
8.1 原子访问:Interlocked 系列函数 232
8.2 高速缓存行 239
8.3 高级线程同步 241
8.4 关键段 243
8.4.1 关键段:细节 246
8.4.2 关键段和自旋锁 249
8.4.3 关键段和错误处理 250
8.5 Slim 读/ 写锁 251
8.6 条件变量 254
8.6.1 Queue 示例程序 255
8.6.2 停止线程时的死锁问题 265
8.6.3 一些有用的技巧和技术 267
第9 章 用内核对象进行线程同步 271
9.1 等待函数 274
9.2 等待成功所引起的副作用 276
9.3 事件内核对象 278
9.4 可等待的计时器内核对象 289
9.4.1 让可等待的计时器入队APC 调用 293
9.4.2 计时器未尽事宜 295
9.5 信号量内核对象 296
9.6 互斥量内核对象 299
9.6.1 遗弃问题 301
9.6.2 互斥量与关键段的比较 302
9.6.3 Queue 示例程序 302
9.7 线程同步对象速查表 312
9.8 其他线程同步函数 313
9.8.1 异步设备I/O 313
9.8.2 WaitForInputIdle 函数 314
9.8.3 MsgWaitForMultipleObjects(Ex) 函数 315
9.8.4 WaitForDebugEvent 函数 315
9.8.5 SignalObjectAndWait 函数 316
9.8.6 使用等待链遍历API 来检测死锁 317
第10 章 同步和异步设备I/O 325
10.1 打开和关闭设备 326
10.2 使用文件设备 335
10.2.1 取得文件的大小 335
10.2.2 定位文件指针 337
10.2.3 设置文件尾 339
10.3 执行同步设备I/O 339
10.3.1 将数据回写到设备 340
10.3.2 同步I/O 取消 340
10.4 异步设备I/O 基础 342
10.4.1 OVERLAPPED 结构 343
10.4.2 异步设备I/O 的注意事项 345
10.4.3 取消队列中的设备I/O 请求 347
10.5 接收I/O 请求完成通知 348
10.5.1 触发设备内核对象 348
10.5.2 触发事件内核对象 350
10.5.3 可提醒I/O 353
10.5.4 I/O 完成端口 359
10.5.5 模拟已完成的I/O 请求 371
第11 章 Windows 线程池 381
11.1 情形1:异步调用函数 382
11.1.1 显式控制工作项 383
11.1.2 Batch 示例程序 385
11.2 情形2:定时调用函数 389
11.3 情形3:在内核对象触发时调用函数 395
11.4 情形4:在异步I/O 请求完成时调用函数 397
11.5 回调函数的终止操作 399
11.5.1 对线程池进行定制 400
11.5.2 得体地销毁线程池:清理组 403
第12 章 纤程 407
第III 部分 内 存 管 理
第13 章 Windows 内存架构 417
13.1 进程的虚拟地址空间 417
13.2 虚拟地址空间的分区 418
13.2.1 空指针赋值分区 419
13.2.2 用户模式分区 419
13.3 地址空间中的区域 422
13.4 为区域调拨物理存储 423
13.5 物理存储和分页文件 424
13.6 页面保护属性 428
13.6.1 写时复制 429
13.6.2 一些特殊的访问保护属性标志 430
13.7 实例分析 430
13.8 数据对齐的重要性 438
第14 章 探索虚拟内存 443
14.1 系统信息 443
14.2 虚拟内存状态 453
14.3 NUMA 机器中的内存管理 455
14.4 确定地址空间的状态 458
14.4.1 VMQuery 函数 460
14.4.2 示例程序:虚拟内存映射 466
第15 章 在应用程序中使用虚拟内存 469
15.1 预订地址空间区域 470
15.2 为预订的区域调拨物理存储 472
15.3 同时预订和调拨物理存储 473
15.4 何时调拨物理存储 474
15.5 撤销调拨物理存储并释放区域 476
15.5.1 何时撤销调拨物理存储 477
15.5.2 虚拟内存分配示例程序 478
15.6 更改保护属性 487
15.7 重置物理存储的内容 488
15.8 地址窗口扩展 492
第16 章 线程栈 505
16.1 C/C 运行库的栈检查函数 510
16.2 Summation 示例程序 512
第17 章 内存映射文件 519
17.1 映射到内存的可执行文件和DLL 520
17.1.1 同一个可执行文件或DLL 的多个实例不会共享静态数据 521
17.1.2 在同一个可执行文件或DLL 的多个实例间共享静态数据 523
17.1.3 Application Instances 示例程序 529
17.2 映射到内存的数据文件 533
17.2.1 方法1:一个文件,一个缓冲区 533
17.2.2 方法2:两个文件,一个缓冲区 534
17.2.3 方法3:一个文件,两个缓冲区 534
17.2.4 方法4:一个文件,零个缓冲区 534
17.3 使用内存映射文件 535
17.3.1 第1 步:创建或打开文件内核对象 535
17.3.2 第2 步:创建文件映射内核对象 536
17.3.3 第3 步:将文件的数据映射到进程的地址空间 540
17.3.4 第4 步:从进程的地址空间撤销对文件数据的映射 543
17.3.5 第5 步和第6 步:关闭文件映射对象和文件对象 545
17.3.6 File Reverse 示例程序 546
17.4 用内存映射文件处理大文件 553
17.5 内存映射文件和一致性 555
17.6 为内存映射文件指定基地址 556
17.7 内存映射文件的实现细节 557
17.8 用内存映射文件在进程间共享数据 558
17.9 以分页文件作为后备存储的内存映射文件 559
17.10 稀疏调拨的内存映射文件 565
第18 章 堆 581
18.1 进程的默认堆 582
18.2 为什么要创建额外的堆 583
18.2.1 对组件进行保护 583
18.2.2 更高效的内存管理 584
18.2.3 局部访问 584
18.2.4 避免线程同步的开销 585
18.2.5 快速释放 585
18.3 如何创建额外的堆 585
18.3.1 从堆中分配内存块 588
18.3.2 调整内存块的大小 589
18.3.3 获得内存块的大小 590
18.3.4 释放内存块 590
18.3.5 销毁堆 591
18.3.6 在C 中使用堆 591
18.4 其他堆函数 594
第IV 部分 动态链接库
第19 章 DLL 基础 601
19.1 DLL 和进程的地址空间 602
19.2 纵观全局 605
19.2.1 生成DLL 模块 607
19.2.2 生成可执行模块 613
19.2.3 运行可执行模块 616
第20 章 DLL 高级技术 619
20.1 DLL 模块的显式加载和符号链接 619
20.1.1 显式加载DLL 模块 621
20.1.2 显式卸载DLL 模块 624
20.1.3 显式链接到导出的符号 627
20.2 DLL 的入口点函数 628
20.2.1 DLL_PROCESS_ATTACH 通知 630
20.2.2 DLL_PROCESS_DETACH 通知 631
20.2.3 DLL_THREAD_ATTACH 通知 633
20.2.4 DLL_THREAD_DETACH 通知 634
20.2.5 DllMain 的序列化调用 635
20.2.6 DllMain 和C/C 运行库 638
20.3 延迟加载DLL 639
20.4 函数转发器 652
20.5 已知的DLL 652
20.6 DLL 重定向 654
20.7 模块的基址重定位 655
20.8 模块的绑定 662
第21 章 线程局部存储 667
21.1 动态TLS 668
21.2 静态TLS 673
第22 章 DLL 注入和API 拦截 675
22.1 DLL 注入的一个例子 676
22.2 使用注册表来注入DLL 678
22.3 使用Windows 挂钩来注入DLL 680
22.4 使用远程线程来注入DLL 694
22.4.1 Inject Library 示例程序 698
22.4.2 Image Walk DLL 705
22.5 使用木马DLL 来注入DLL 708
22.6 将DLL 作为调试器来注入 708
22.7 使用CreateProcess 来注入代码 709
22.8 API 拦截的一个例子 709
22.8.1 通过覆盖代码来拦截API 710
22.8.2 通过修改模块的导入段来拦截API 711
22.8.3 Last MessageBox Info 示例程序 715
第V 部分 结构化异常处理
第23 章 终止处理程序 739
第24 章 异常处理程序与软件异常 761
24.1 通过实例理解异常过滤程序和异常处理程序 762
24.1.1 Funcmeister1 函数 762
24.1.2 Funcmeister2 函数 763
24.2 EXCEPTION_EXECUTE_HANDLER 765
24.2.1 一些有用的例子 766
24.2.2 全局展开 769
24.2.3 停止全局展开 772
24.3 EXCEPTION_CONTINUE_EXECUTION 774
24.4 EXCEPTION_CONTINUE_SEARCH 776
24.5 GetExceptionCode 778
24.6 GetExceptionInformation 函数 783
24.7 软件异常 787
第25 章 未处理异常、向量化异常处理与C 异常 791
25.1 UnhandledExceptionFilter 函数详解 794
25.2 即时调试 799
25.3 Spreadsheet 示例程序 802
25.4 向量化异常和继续处理程序 814
25.5 C 异常与结构化异常的比较 815
25.6 异常与调试器 817
第26 章 错误报告与应用程序恢复 821
26.1 Windows 错误报告控制台 821
26.2 可编程的Windows 错误报告 824
26.3 定制进程中的所有问题报告 826
26.4 问题报告的创建与定制 828
26.4.1 创建自定义问题报告 830
26.4.2 设置报告参数:WerReportSetParameter 832
26.4.3 将小型转储文件放入报告:WerReportAddDump 832
26.4.4 将任意文件放入报告:WerReportAddFile 833
26.4.5 修改对话框文本:WerReportSetUIOption 834
26.4.6 提交错误报告:WerReportSubmit 835
26.4.7 关闭问题报告:WerReportCloseHandle 836
26.4.8 Customized WER 示例程序 837
26.5 应用程序的自动重启与恢复 845
26.5.1 应用程序的自动重启 845
26.5.2 应用程序恢复的支持 846
附 录
附录A 生成环境 851
附录B 消息处理宏、子控件宏和API 宏 865
索引 871
展开全部
作者简介
杰弗里·李希特
(Jeffrey Richter)
知名Windows和.NET技术专家,专业畅销书作者。他的《Windows核心编程》和《CLR》系列培育了好几代软件开发人员。他是Wintellect公司的联合创始人,也是MSDN杂志.NET专栏的特邀编辑。1999年开始,他就以技术顾问的方式与.NET框架开发团队紧密合作,共同经历了.NET框架的孕育与诞生,对.NET思想的领悟、对.NET的细节熟稔,是其他任何作者难以企及的,他是.NET领域当之无愧的一面旗帜。杰弗里目前供职于微软。 克里斯托弗·纳萨雷
(Christophe Nasarre)
MSDN杂志撰稿人,Business Objects的软件架构师和开发部门领导,该公司致力于通过商务智能解决方案来提升决策能力和绩效。 周 靖
微软MVP(*有价值专家),技术型资深译者。涉猎广泛,具有深厚的技术功底和良好的文学素养。早期痴迷于硬件,曾多年担任《微型计算机》杂志特约作者。继而潜心钻研程序设计并在这方面积累了丰富的经验。翻译风格严谨、准确、朴实、流畅,深受读者好评。代表译著有《C++入门经典》(z新版第10版)、《Windows核心编程》(z新版第5版)、《CLR via C》(z新版第4版)和《Visual C#从入门到精通》(z新版第10版)等。
预估到手价 ×
预估到手价是按参与促销活动、以最优惠的购买方案计算出的价格(不含优惠券部分),仅供参考,未必等同于实际到手价。
确定