Windows核心编程(第5版 中文限量版)

Windows核心编程(第5版 中文限量版)
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
2022-10
版次: 1
ISBN: 9787302609322
定价: 256.00
装帧: 其他
开本: 16开
纸张: 胶版纸
  • 《Windows核心编程(第5版 中文限量版)》是一本经典的Windows核心编程指南,从第1版到第5版,引领着数十万程序员走入Windows开发阵营,培养了大批精英。
      作为Windows开发人员的必备参考,《Windows核心编程(第5版 中文限量版)》是为打算理解Windows的C和C
      程序员精心设计的。第5版全面覆盖Windows XP,Windows Vista和Windows Server 2008中的170个新增函数和Windows特性。书中还讲解了Windows系统如何使用这些特性,我们开发的应用程序又如何充分使用这些特性,如何自行创建新的特性。 杰弗里·李希特

    (Jeffrey Richter)

    知名Windows和.NET技术专家,专业畅销书作者。他的《Windows核心编程》和《CLR》系列培育了好几代软件开发人员。他是Wintellect公司的联合创始人,也是MSDN杂志.NET专栏的特邀编辑。1999年开始,他就以技术顾问的方式与.NET框架开发团队紧密合作,共同经历了.NET框架的孕育与诞生,对.NET思想的领悟、对.NET的细节熟稔,是其他任何作者难以企及的,他是.NET领域当之无愧的一面旗帜。杰弗里目前供职于微软。

    克里斯托弗·纳萨雷

    (Christophe Nasarre)

    MSDN杂志撰稿人,Business Objects的软件架构师和开发部门领导,该公司致力于通过商务智能解决方案来提升决策能力和绩效。

    周   靖

    微软MVP(最有价值专家),技术型资深译者。涉猎广泛,具有深厚的技术功底和良好的文学素养。早期痴迷于硬件,曾多年担任《微型计算机》杂志特约作者。继而潜心钻研程序设计并在这方面积累了丰富的经验。翻译风格严谨、准确、朴实、流畅,深受读者好评。代表译著有《C  入门经典》(最新版第10版)、《Windows核心编程》(最新版第5版)、《CLR via C》(最新版第4版)和《Visual C#从入门到精通》(最新版第10版)等。 第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
  • 内容简介:
    《Windows核心编程(第5版 中文限量版)》是一本经典的Windows核心编程指南,从第1版到第5版,引领着数十万程序员走入Windows开发阵营,培养了大批精英。
      作为Windows开发人员的必备参考,《Windows核心编程(第5版 中文限量版)》是为打算理解Windows的C和C
      程序员精心设计的。第5版全面覆盖Windows XP,Windows Vista和Windows Server 2008中的170个新增函数和Windows特性。书中还讲解了Windows系统如何使用这些特性,我们开发的应用程序又如何充分使用这些特性,如何自行创建新的特性。
  • 作者简介:
    杰弗里·李希特

    (Jeffrey Richter)

    知名Windows和.NET技术专家,专业畅销书作者。他的《Windows核心编程》和《CLR》系列培育了好几代软件开发人员。他是Wintellect公司的联合创始人,也是MSDN杂志.NET专栏的特邀编辑。1999年开始,他就以技术顾问的方式与.NET框架开发团队紧密合作,共同经历了.NET框架的孕育与诞生,对.NET思想的领悟、对.NET的细节熟稔,是其他任何作者难以企及的,他是.NET领域当之无愧的一面旗帜。杰弗里目前供职于微软。

    克里斯托弗·纳萨雷

    (Christophe Nasarre)

    MSDN杂志撰稿人,Business Objects的软件架构师和开发部门领导,该公司致力于通过商务智能解决方案来提升决策能力和绩效。

    周   靖

    微软MVP(最有价值专家),技术型资深译者。涉猎广泛,具有深厚的技术功底和良好的文学素养。早期痴迷于硬件,曾多年担任《微型计算机》杂志特约作者。继而潜心钻研程序设计并在这方面积累了丰富的经验。翻译风格严谨、准确、朴实、流畅,深受读者好评。代表译著有《C  入门经典》(最新版第10版)、《Windows核心编程》(最新版第5版)、《CLR via C》(最新版第4版)和《Visual C#从入门到精通》(最新版第10版)等。
  • 目录:
    第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
查看详情
12
您可能感兴趣 / 更多
Windows核心编程(第5版 中文限量版)
争吵的恋人:我们为什么相爱,又为什么争吵
[美]约翰·金,[美]瓦妮莎·贝内特
Windows核心编程(第5版 中文限量版)
一个画家的旅程(一本讲述被誉为“美国艺术创始人”的传记绘本)
[美]哈德逊·塔尔伯特
Windows核心编程(第5版 中文限量版)
蒙特卡洛的密码锁(数学大师的逻辑课) 文教科普读物 [美]雷蒙德·m.斯穆里安(raymondm.smullyan)
[美]雷蒙德·m.斯穆里安(raymondm.smullyan)
Windows核心编程(第5版 中文限量版)
福尔摩斯的棋盘:关于国际象棋的推理题(数学大师的逻辑课)
[美]雷蒙德·m.斯穆里安
Windows核心编程(第5版 中文限量版)
你好,我是阿斯伯格女孩
[美]露迪·西蒙
Windows核心编程(第5版 中文限量版)
《生命大设计.重构》(关于“生命创造现实”这一惊人事实,独特且完整的科学探索与哲学诠释)
[美]鲍勃·伯曼 著;杨泓 译;[美]罗伯特·兰札;马泰·帕夫希奇(斯洛文尼亚)
Windows核心编程(第5版 中文限量版)
新视界文库-生命故事:生物学上的伟大发现
[美]肖恩·B.卡罗尔
Windows核心编程(第5版 中文限量版)
托尔斯泰
[美]莉莎·克纳普(Liza Knapp)
Windows核心编程(第5版 中文限量版)
爱,浪漫和婚姻的99个重点
[美]江柏 德 著
Windows核心编程(第5版 中文限量版)
故事思维 商业管理 思维表达职场沟通人际交往
[美]安妮特·西蒙斯 后浪
Windows核心编程(第5版 中文限量版)
全球通史(全六册)(另一个角度的“全球通史”,不一样的视野与新知。以地理为骨,历史为肉,一部超级丰满的世界通史。)
[美]塞缪尔·古德里奇 译者:冷惠玲、冯佳娜、王小忠、孙丽霞、李江艳
Windows核心编程(第5版 中文限量版)
《星际争霸》动画影像艺术
[美]罗伯特·布鲁克斯