当前位置:首页 > 工业技术
Windows 核心编程
Windows 核心编程

Windows 核心编程PDF电子书下载

工业技术

  • 电子书积分:21 积分如何计算积分?
  • 作 者:(美)杰夫瑞,(法)克里斯托夫著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2008
  • ISBN:9787302184003
  • 页数:770 页
图书介绍:这是一本经典的Windows核心编程指南,从第1版到第5版,引领着数十万程序员走入Windows开发阵营,培养了大批精英。
《Windows 核心编程》目录
标签:核心 编程

第Ⅰ部分 必备知识 3

第1章 错误处理 3

1.1定义自己的错误代码 7

1.2 ErrorShow示例程序 7

第2章 字符和字符串处理 10

2.1字符编码 11

2.2 ANSI字符和Unicode字符与字符串数据类型 12

2.3 Windows中的Unicode函数和ANSI函数 14

2.4 C运行库中的Unicode函数和ANSI函数 16

2.5 C运行库中的安全字符串函数 17

2.5.1初识新的安全字符串函数 18

2.5.2在处理字符串时如何获得更多控制 21

2.5.3 Windows字符串函数 23

2.6为何要用Unicode 24

2.7推荐的字符和字符串处理方式 25

2.8Unicode与ANSI字符串转换 26

2.8.1导出 ANSI和 Unicode DLL函数 28

2.8.2判断文本是ANSI还是Unicode 29

第3章 内核对象 32

3.1何为内核对象 32

3.1.1使用计数 34

3.1.2内核对象的安全性 34

3.2进程内核对象句柄表 36

3.2.1创建一个内核对象 37

3.2.2关闭内核对象 38

3.3跨进程边界共享内核对象 42

3.3.1使用对象句柄继承 42

3.3.2改变句柄的标志 45

3.3.3为对象命名 46

3.3.4终端服务命名空间 50

3.3.5专有命名空间 51

3.3.6复制对象句柄 58

第Ⅱ部分 工作机理 65

第4章 进程 65

4.1编写第一个Windows应用程序 66

4.1.1进程实例句柄 71

4.1.2进程前一个实例的句柄 72

4.1.3进程的命令行 73

4.1.4进程的环境变量 74

4.1.5进程的关联性 79

4.1.6进程的错误模式 79

4.1.7进程当前所在的驱动器和目录 80

4.1.8进程的当前目录 81

4.1.9系统版本 82

4.2 CreateProcess函数 85

4.2.1 pszApplicationName和pszCommandLine参数 86

4.2.2 psaProcess, psaThread和bInheritHandles参数 87

4.2.3 fdwCreate参数 89

4.2.4 pvEnvironment参数 91

4.2.5 pszCurDir参数 92

4.2.6 psiStartInfo参数 92

4.2.7 ppiProcInfo参数 98

4.3终止进程 100

4.3.1主线程的入口点函数返回 100

4.3.2 ExitProcess函数 101

4.3.3 TerminateProcess函数 102

4.3.4当进程中的所有线程终止时 103

4.3.5当进程终止运行时 103

4.4子进程 104

4.5管理员以标准用户权限运行时 106

4.5.1自动提升进程的权限 109

4.5.2手动提升进程的权限 111

4.5.3何为当前权限上下文 112

4.5.4枚举系统中正在运行的进程 114

4.5.5 Process Information示例程序 115

第5章 作业 121

5.1对作业中的进程施加限制 124

5.2将进程放入作业中 131

5.3终止作业中的所有线程 132

5.4作业通知 135

5.5 Job Lab示例程序 138

第6章 线程基础 140

6.1何时创建线程 141

6.2何时不应该创建线程 143

6.3编写第一个线程函数 144

6.4 CreateThread函数 144

6.4.1 psa参数 145

6.4.2 cbStackSize参数 145

6.4.3 pfnStartAddr和pvParam参数 146

6.4.4 dwCreateFlags 147

6.4.5 pdwThreadID 147

6.5终止运行线程 148

6.5.1线程函数返回 148

6.5.2 ExitThread函数 148

6.5.3 TerminateThread函数 149

6.5.4进程终止运行时 149

6.5.5线程终止运行时 150

6.6线程内幕 150

6.7C/C++++运行库注意事项 153

6.7.1用_beginthreadex而不要用CreateThread创建线程 161

6.7.2绝对不应该调用的C/C++运行库函数 161

6.8了解自己的身份 162

第7章 线程调度、优先级和关联性 165

7.1线程的挂起和恢复 166

7.2进程的挂起和恢复 167

7.3睡眠 169

7.4切换到另一个线程 169

7.5在超线程CPU上切换到另一个线程 170

7.6线程的执行时间 170

7.7在实际上下文中谈CONTEXT结构 174

7.8线程优先级 178

7.9从抽象角度看优先级 179

7.10优先级编程 182

7.10.1动态提升线程优先级 185

7.10.2为前台进程微调调度程序 186

7.10.3调度1/O请求优先级 186

7.10.4 Scheduling Lab示例程序 188

7.11关联性 192

第8章 用户模式下的线程同步 197

8.1原子访问:Interlocked系列函数 198

8.2高速缓存行 203

8.3高级线程同步 205

8.4关键段 207

8.4.1关键段:细节 209

8.4.2关键段和旋转锁 212

8.4.3关键段和错误处理 213

8.5 Slim读/写锁 214

8.6条件变量 217

8.6.1 Queue示例程序 218

8.6.2在停止线程时的死锁问题 225

8.6.3一些有用的窍门和技巧 227

第9章 用内核对象进行线程同步 230

9.1等待函数 232

9.2等待成功所引起的副作用 235

9.3事件内核对象 236

9.4可等待的计时器内核对象 245

9.4.1让可等待的计时器添加APC调用 248

9.4.2计时器的剩余问题 250

9.5信号量内核对象 251

9.6互斥量内核对象 253

9.6.1遗弃问题 255

9.6.2互斥量与关键段的比较 256

9.6.3 Queue示例程序 256

9.7线程同步对象速查表 264

9.8其他的线程同步函数 265

9.8.1异步设备I/0 265

9.8.2 WaitForInputIdle函数 265

9.8.3 MsgWaitForMultipleObjects(Ex)函数 266

9.8.4 WaitForDebugEvent函数 267

9.8.5 SignalObjectAndWait函数 267

9.8.6使用等待链遍历API来检测死锁 268

第10章 同步设备I/O与异步设备I/0 275

10.1打开和关闭设备 276

10.2使用文件设备 285

10.2.1取得文件的大小 285

10.2.2设置文件指针的位置 286

10.2.3设置文件尾 288

10.3执行同步设备I/O 289

10.3.1将数据刷新至设备 289

10.3.2同步I/0的取消 290

10.4异步设备1/O基础 291

10.4.1 OVERLAPPED结构 292

10.4.2异步设备I/O的注意事项 294

10.4.3取消队列中的设备I/O请求 296

10.5接收I/O请求完成通知 296

10.5.1触发设备内核对象 297

10.5.2触发事件内核对象 298

10.5.3可提醒I/0 301

10.5.4 I/O完成端口 306

10.5.5模拟已完成的I/O请求 316

第11章 Windows线程池 324

11.1情形1:以异步方式调用函数 325

11.1.1显式地控制工作项 325

11.1.2 Batch示例程序 327

11.2情形2:每隔一段时间调用一个函数 330

11.3情形3:在内核对象触发时调用一个函数 335

11.4情形4:在异步I/O请求完成时调用一个函数 337

11.5回调函数的终止操作 339

11.5.1对线程池进行定制 340

11.5.2得体地销毁线程池:清理组 342

第12章 纤程 345

第Ⅲ部分 内存管理 355

第13章 Windows内存体系结构 355

13.1进程的虚拟地址空间 355

13.2虚拟地址空间的分区 356

13.2.1空指针赋值分区 357

13.2.2用户模式分区 357

13.3地址空间中的区域 360

13.4给区域调拨物理存储器 361

13.5物理存储器和页交换文件 362

13.6页面保护属性 365

13.6.1写时复制 366

13.6.2一些特殊的访问保护属性标志 367

13.7实例分析 367

13.8数据对齐的重要性 375

第14章 探索虚拟内存 379

14.1系统信息 379

14.2虚拟内存状态 387

14.3 NUMA机器中的内存管理 388

14.4确定地址空间的状态 391

14.4.1 VMQuety函数 392

14.4.2示例程序:虚拟内存映射 397

第15章 在应用程序中使用虚拟内存 400

15.1预订地址空间区域 400

15.2给区域调拨物理存储器 402

15.3同时预订和调拨物理存储器 403

15.4何时调拨物理存储器 405

15.5撤销调拨物理存储器及释放区域 407

15.5.1何时撤销调拨物理存储器 407

15.5.2虚拟内存分配示例程序 408

15.6改变保护属性 414

15.7重置物理存储器的内容 415

15.8地址窗口扩展 419

第16章 线程栈 429

16.1 C/C++运行库的栈检查函数 433

16.2 Summation示例程序 435

第17章 内存映射文件 440

17.1映射到内存的可执行文件和DLL 441

17.1.1同一个可执行文件或DLL的多个实例不会共享静态数据 442

17.1.2在同一个可执行文件或DLL的多个实例间共享静态数据 444

17.1.3 Application Instances示例程序 449

17.2映射到内存的数据文件 451

17.2.1方法1:一个文件,一块缓存 451

17.2.2方法2:两个文件,一块缓存 452

17.2.3方法3:一个文件,两块缓存 452

17.2.4方法4:一个文件,零个缓存 453

17.3使用内存映射文件 453

17.3.1第1步:创建或打开文件内核对象 454

17.3.2第2步:创建文件映射内核对象 455

17.3.3第3步:将文件的数据映射到进程的地址空间 458

17.3.4第4步:从进程的地址空间撤销对文件数据的映射 461

17.3.5第5步和第6步:关闭文件映射对象和文件对象 462

17.3.6 File Reverse示例程序 463

17.4用内存映射文件来处理大文件 469

17.5内存映射文件和一致性 470

17.6给内存映射文件指定基地址 471

17.7内存映射文件的实现细节 472

17.8用内存映射文件在进程间共享数据 473

17.9以页交换文件为后备存储器的内存映射文件 474

17.10稀疏调拨的内存映射文件 478

第18章 堆 491

18.1进程的默认堆 491

18.2为什么要创建额外的堆 492

18.2.1对组件进行保护 493

18.2.2更有效的内存管理 493

18.2.3使内存访问局部化 494

18.2.4避免线程同步的开销 494

18.2.5快速释放 495

18.3如何创建额外的堆 495

18.3.1从堆中分配内存块 497

18.3.2调整内存块的大小 498

18.3.3获得内存块的大小 499

18.3.4释放内存块 500

18.3.5销毁堆 500

18.3.6在C++中使用堆 500

18.4其他堆函数 503

第Ⅳ部分 动态链接库 509

第19章 DLL基础 509

19.1 DLL和进程的地址空间 510

19.2纵观全局 512

19.2.1构建DLL模块 514

19.2.2构建可执行模块 519

19.2.3运行可执行模块 522

第20章 DLL高级技术 524

20.1 DLL模块的显式载入和符号链接 524

20.1.1显式地载入DLL模块 525

20.1.2显式地卸载DLL模块 529

20.1.3显式地链接到导出符号 532

20.2 DLL的入口点函数 533

20.2.1 DLL PROCESS ATTACH通知 534

20.2.2 DLL PROCESS DETACH通知 535

20.2.3 DLL THREAD ATTACH通知 537

20.2.4 DLL THREAD DETACH通知 538

20.2.5 DllMain的序列化调用 538

20.2.6 DllMain和C/C++运行库 541

20.3延迟载入DLL 542

20.4函数转发器 553

20.5已知的DLL 553

20.6 DLL重定向 555

20.7模块的基地址重定位 556

20.8模块的绑定 562

第21章 线程局部存储区 565

21.1动态TLS 566

21.2静态TLS 570

第22章 DLL注入和API拦截 572

22.1 DLL注入的一个例子 573

22.2使用注册表来注入DLL 575

22.3使用Windows挂钩来注入DLL 576

22.4使用远程线程来注入DLL 587

22.4.1 Inject Library示例程序 591

22.4.2 Image Walk DLL 596

22.5使用木马DLL来注入DLL 598

22.6把DLL作为调试器来注入 598

22.7使用CreateProcess来注入代码 599

22.8 API拦截的一个例子 599

22.8.1通过覆盖代码来拦截API 600

22.8.2通过修改模块的导入段来拦截API 601

22.8.3 Last MessageBox Info示例程序 604

第Ⅴ部分 结构化异常处理 621

第23章 终止处理程序 621

第24章 异常处理程序与软件异常 638

24.1通过实例理解异常过滤程序和异常处理程序 638

24.1.1 Funcmeisterl函数 639

24.1.2 Funcmeister2函数 639

24.2 EXCEPTION EXECUTE HANDLER 641

24.2.1一些有用的例子 642

24.2.2全局展开 645

24.2.3停止全局展开 647

24.3 EXCEPTION CONTINUE EXECUTION 648

24.4 EXCEPTION CONTINUE SEARCH 650

24.5 GetExceptionCode 652

24.6 GetExceptionInformation 656

24.7软件异常 659

第25章 未处理异常、向量化异常处理与C++异常 663

25.1 UnhandledExceptionFilter函数详解 665

25.2即时调试 671

25.3电子表格示例程序 673

25.4向量化异常和继续处理程序 681

25.5 C++异常与结构化异常的比较 683

25.6异常与调试器 684

第26章 错误报告与应用程序恢复 688

26.1 Windows错误报告控制台 688

26.2可编程的Windows错误报告 691

26.3对进程中所有的问题报告进行定制 693

26.4问题报告的创建与定制 694

26.4.1创建一个自定义的问题报告 697

26.4.2设置报告参数:WerReportSetParameter 698

26.4.3将小型转储文件放入报告:WerReportAddDump 698

26.4.4将任意文件放入报告:WerReportAddFile 699

26.4.5修改对话框文本:WerReport SetUIOption 700

26.4.6提交错误报告:WerReportSubmit 700

26.4.7 关闭问题报告:WerReportCloseHandle 702

26.4.8 Customized WER示例程序 702

26.5应用程序的自动重启与恢复 708

26.5.1应用程序的自动重启 708

26.5.2对应用程序恢复的支持 709

第Ⅵ部分 713

附录A 构建环境 713

附录B 消息处理宏、子控件宏和API宏 724

索引 729

相关图书
作者其它书籍
返回顶部