❶ 《Windows核心编程(第5版)微软技术丛书》pdf下载在线阅读,求百度网盘云资源
《Windows核心编程》(Jeffrey Richter)电子书网盘下载免费在线阅读
链接:
书名:Windows核心编程
作者:Jeffrey Richter
豆瓣评分:9.2
出版社:人民邮电出版社
出版年份:2008-8
页数:820
内容简介:
【内容简介】
本书是Windows 程序设计领域的名着,涵盖了Windows 的最新版本Vista 以及Windows XP 的最新内容。书中全面深入地介绍了Windows 的各种基本要素,如进程、线程池、虚拟内存、DLL、设备I/O 和SEH 等,并列举了大量应用程序,精辟地分析了要素的使用方法。.
本书适于各层次Windows 编程人员阅读。 ...
【目录信息】
Acknowledgments . xxi
Introction xxiii
64-Bit Windows xxiii
What’s New in the Fifth Edition xxiv
Code Samples and System Requirements xxvi
Support for This Book xxvi
Questions and Comments xxvi
Part I Required Reading
1 Error Handling 3
Defining Your Own Error Codes 7
The ErrorShow Sample Application 7
2 Working with Characters and Strings 11
Character Encodings 12
ANSI and Unicode Character and String Data Types 13
Unicode and ANSI Functions in Windows 15
Unicode and ANSI Functions in the C Run-Time Library 17
Secure String Functions in the C Run-Time Library 18
Introcing the New Secure String Functions 19
How to Get More Control When Performing String Operations 22
<< 查看详细目录
作者简介:
Jeffrey Richter全球享有盛誉的微软技术专家,着名技术咨询和培训公司Wintellect创始人之一,MSDN Magazine杂志特邀编辑。多年来,他担任微软各开发团队顾问,参与了微软的许多关键产品包括各版本Windows、Visual Studio、Microsoft Offce和.NET框架的设计和编程。他撰写了一系列着作,包括本书和《深入理解.NET》(第2版·英文版,人民邮电出版社。2008),都堪称技术图书的典范,影响了一代Windows程序员,并因此荣获微软公司杜区最高技术荣誉“微软软件传奇人物”(Software Legend)称号。
❷ 求 《windows 核心编程(第五版)( windows via c/c++ )》的书中的例子的代码
看了你的描述,再结合我的临床经验,确诊你的病叫慢性湿疹,主要表现是双脚勃皮肤色暗,干燥,粗糙,脱皮,晚上瘙痒难忍。患处的皮损会慢慢的扩大,这病可以治愈,需要几个月的时间用药。
綪寀纳 一②3四⑤陆
❸ 谁知道<<WINDOWS核心编程>>第5版的目录,微软强人写的
目 录
译者序
前言
第一部分 程序员必读
第1章 对程序错误的处理 1
1.1 定义自己的错误代码 4
1.2 ErrorShow示例应用程序 5
第2章 Unicode 11
2.1 字符集 11
2.1.1 单字节与双字节字符集 11
2.1.2 Unicode:宽字节字符集 12
2.2 为什么使用Unicode 13
2.3 Windows 2000与Unicode 13
2.4 Windows 98与Unicode 13
2.5 Windows CE与Unicode 14
2.6 需要注意的问题 14
2.7 对COM的简单说明 14
2.8 如何编写Unicode源代码 15
2.8.1 C运行期库对Unicode的支持 15
2.8.2 Windows定义的Unicode数据类型 17
2.8.3 Windows中的Unicode函数和ANSI
函数 17
2.8.4 Windows字符串函数 19
2.9 成为符合ANSI和Unicode的应用程序 19
2.9.1 Windows字符串函数 19
2.9.2 资源 22
2.9.3 确定文本是ANSI文本还是Unicode
文本 22
2.9.4 在Unicode与ANSI之间转换字符串 23
第3章 内核对象 27
3.1 什么是内核对象 27
3.1.1 内核对象的使用计数 27
3.1.2 安全性 28
3.2 进程的内核对象句柄表 30
3.2.1 创建内核对象 30
3.2.2 关闭内核对象 32
3.3 跨越进程边界共享内核对象 32
3.3.1 对象句柄的继承性 32
3.3.2 改变句柄的标志 35
3.3.3 命名对象 36
3.3.4 终端服务器的名字空间 39
3.3.5 复制对象句柄 39
第二部分 编程的具体方法
第4章 进程 45
4.1 编写第一个Windows应用程序 46
4.1.1 进程的实例句柄 49
4.1.2 进程的前一个实例句柄 50
4.1.3 进程的命令行 50
4.1.4 进程的环境变量 51
4.1.5 进程的亲缘性 54
4.1.6 进程的错误模式 54
4.1.7 进程的当前驱动器和目录 54
4.1.8 进程的当前目录 55
4.1.9 系统版本 56
4.2 CreateProcess函数 58
4.2.1 pszApplicationName和
pszCommandLine 59
4.2.2 psa Process、psa Thread和
binherit Handles 60
4.2.3 fdwCreate 62
4.2.4 pvEnvironment 64
4.2.5 pszCurDir 64
4.2.6 psiStartInfo 64
4.2.7 ppiProcInfo 67
4.3 终止进程的运行 69
4.3.1 主线程的进入点函数返回 69
4.3.2 ExitProcess函数 69
4.3.3 TerminateProcess函数 70
4.3.4 进程终止运行时出现的情况 71
4.4 子进程 72
4.5 枚举系统中运行的进程 73
第5章 作业 91
5.1 对作业进程的限制 93
5.2 将进程放入作业 99
5.3 终止作业中所有进程的运行 99
5.4 查询作业统计信息 100
5.5 作业通知信息 103
5.6 JobLab示例应用程序 104
第6章 线程的基础知识 121
6.1 何时创建线程 121
6.2 何时不能创建线程 122
6.3 编写第一个线程函数 123
6.4 CreateThread函数 124
6.4.1 psa 124
6.4.2 cbStack 124
6.4.3 pfnStartAddr和pvParam 125
6.4.4 fdwCreate 126
6.4.5 pdwThreadID 126
6.5 终止线程的运行 127
6.5.1 线程函数返回 127
6.5.2 ExitThread函数 127
6.5.3 TerminateThread函数 127
6.5.4 在进程终止运行时撤消线程 128
6.5.5 线程终止运行时发生的操作 128
6.6 线程的一些性质 129
6.7 C/C++运行期库的考虑 131
6.7.1 Oops—错误地调用了Create Thread 138
6.7.2 不应该调用的C/C++运行期库函数 138
6.8 对自己的ID概念应该有所了解 139
第7章 线程的调度、优先级和亲缘性 142
7.1 暂停和恢复线程的运行 143
7.2 暂停和恢复进程的运行 144
7.3 睡眠方式 145
7.4 转换到另一个线程 145
7.5 线程的运行时间 146
7.6 运用环境结构 148
7.7 线程的优先级 152
7.8 对优先级的抽象说明 153
7.9 程序的优先级 156
7.9.1 动态提高线程的优先级等级 158
7.9.2 为前台进程调整调度程序 159
7.9.3 Scheling Lab示例应用程序 160
7.10 亲缘性 167
第8章 用户方式中线程的同步 172
8.1 原子访问:互锁的函数家族 172
8.2 高速缓存行 177
8.3 高级线程同步 178
8.4 关键代码段 180
8.4.1 关键代码段准确的描述 182
8.4.2 关键代码段与循环锁 185
8.4.3 关键代码段与错误处理 185
8.4.4 非常有用的提示和技巧 186
第9章 线程与内核对象的同步 190
9.1 等待函数 191
9.2 成功等待的副作用 194
9.3 事件内核对象 195
9.4 等待定时器内核对象 204
9.4.1 让等待定时器给APC项排队 207
9.4.2 定时器的松散特性 209
9.5 信标内核对象 210
9.6 互斥对象内核对象 211
9.6.1 释放问题 213
9.6.2 互斥对象与关键代码段的比较 214
9.6.3 Queue示例应用程序 214
9.7 线程同步对象速查表 223
9.8 其他的线程同步函数 224
9.8.1 异步设备I/O 224
9.8.2 WaitForInputIdle 224
9.8.3 MsgWaitForMultipleObjects (Ex) 225
9.8.4 WaitForDebugEvent 225
9.8.5 SingleObjectAndWait 226
第10章 线程同步工具包 228
10.1 实现关键代码段:Optex 228
10.2 创建线程安全的数据类型和反信标 239
10.3 单个写入程序/多个阅读程序的保护 251
10.4 实现一个WaitForMultipleExpressions
函数 259
第11章 线程池的使用 274
11.1 方案1:异步调用函数 275
11.2 方案2:按规定的时间间隔调用函数 277
11.3 方案3:当单个内核对象变为已通知状态
时调用函数 283
11.4 方案4:当异步I/O请求完成运行时调用
函数 285
第12章 纤程 287
12.1 纤程的操作 287
12.2 Counter示例应用程序 289
第三部分 内 存 管 理
第13章 Windows的内存结构 299
13.1 进程的虚拟地址空间 299
13.2 虚拟地址空间如何分区 300
13.2.1 NuLL 指针分配的分区—适用于
Windows 2000和Windows 98 300
13.2.2 MS-DOS/16位Windows 应用程序兼容
分区—仅适用于Windows 98 301
13.2.3 用户方式分区—适用于Windows 2000
和Windows 98 301
13.2.4 64 KB禁止进入的分区—仅适用
于Windows 2000 302
13.2.5 共享的MMF分区—仅适用于
Windows 98 303
13.2.6 内核方式分区—适用于Windows
2000和Windows 98 303
13.3 地址空间中的区域 303
13.4 提交地址空间区域中的物理存储器 304
13.5 物理存储器与页文件 304
13.6 保护属性 307
13.6.1 Copy-On-Write 访问 308
13.6.2 特殊的访问保护属性的标志 309
13.7 综合使用所有的元素 309
13.7.1 区域的内部情况 312
13.7.2 与Windows 98地址空间的差别 315
13.8 数据对齐的重要性 319
第14章 虚拟内存 323
14.1 系统信息 323
14.2 虚拟内存的状态 330
14.3 确定地址空间的状态 336
14.3.1 VMQuery函数 337
14.3.2 虚拟内存表示例应用程序 343
第15章 在应用程序中使用虚拟内存 354
15.1 在地址空间中保留一个区域 354
15.2 在保留区域中的提交存储器 355
15.3 同时进行区域的保留和内存的提交 356
15.4 何时提交物理存储器 357
15.5 回收虚拟内存和释放地址空间区域 358
15.5.1 何时回收物理存储器 359
15.5.2 虚拟内存分配的示例应用程序 360
15.6 改变保护属性 368
15.7 清除物理存储器的内容 369
15.8 地址窗口扩展—适用于
Windows 2000 372
第16章 线程的堆栈 385
16.1 Windows 98下的线程堆栈 387
16.2 C/C++运行期库的堆栈检查函数 389
16.3 Summation示例应用程序 390
第17章 内存映射文件 397
17.1 内存映射的可执行文件和DLL
文件 397
17.1.1 可执行文件或DLL的多个实例
不能共享静态数据 398
17.1.2 在可执行文件或DLL的多个实
例之间共享静态数据 400
17.1.3 AppInst示例应用程序 404
17.2 内存映射数据文件 409
17.2.1 方法 1:一个文件,一个缓存 409
17.2.2 方法 2:两个文件,一个缓存 409
17.2.3 方法 3:一个文件,两个缓存 410
17.2.4 方法 4:一个文件,零缓存 410
17.3 使用内存映射文件 410
17.3.1 步骤 1:创建或打开文件内核
对象 411
17.3.2 步骤 2:创建一个文件映射内核
对象 412
17.3.3 步骤 3:将文件数据映射到进程
的地址空间 414
17.3.4 步骤4:从进程的地址空间中撤消
文件数据的映像 416
17.3.5 步骤 5和步骤 6:关闭文件映射对象
和文件对象 417
17.3.6 文件倒序示例应用程序 418
17.4 使用内存映射文件来处理大文件 426
17.5 内存映射文件与数据视图的相关性 427
17.6 设定内存映射文件的基地址 428
17.7 实现内存映射文件的具体方法 429
17.8 使用内存映射文件在进程之间共享
数据 431
17.9 页文件支持的内存映射文件 431
17.10 稀疏提交的内存映射文件 438
第18章 堆栈 451
18.1 进程的默认堆栈 451
18.2 为什么要创建辅助堆栈 452
18.2.1 保护组件 452
18.2.2 更有效的内存管理 453
18.2.3 进行本地访问 453
18.2.4 减少线程同步的开销 453
18.2.5 迅速释放堆栈 453
18.3 如何创建辅助堆栈 454
18.3.1 从堆栈中分配内存块 455
18.3.2 改变内存块的大小 456
18.3.3 了解内存块的大小 456
18.3.4 释放内存块 457
18.3.5 撤消堆栈 457
18.3.6 用C++程序来使用堆栈 457
18.4 其他堆栈函数 460
第四部分 动态链接库
第19章 DLL基础 463
19.1 DLL与进程的地址空间 464
19.2 DLL的总体运行情况 465
19.3 创建DLL模块 467
19.3.1 输出的真正含义是什么 469
19.3.2 创建用于非Visual C++工具
的DLL 471
19.4 创建可执行模块 472
19.5 运行可执行模块 474
第20章 DLL的高级操作技术 477
20.1 DLL模块的显式加载和
符号链接 477
20.1.1 显式加载DLL模块 478
20.1.2 显式卸载DLL模块 479
20.1.3 显式链接到一个输出符号 480
20.2 DLL的进入点函数 481
20.2.1 DLL_PROCESS_ATTACH通知 482
20.2.2 DLL_PROCESS_DETACH通知 483
20.2.3 DLL_THREAD_ATTACH通知 485
20.2.4 DLL_THREAD_DETACH通知 485
20.2.5 顺序调用DllMain 486
20.2.6 DllMain与C/C++运行期库 488
20.3 延迟加载DLL 489
20.4 函数转发器 499
20.5 已知的DLL 499
20.6 DLL转移 500
20.7 改变模块的位置 501
20.8 绑定模块 506
第21章 线程本地存储器 509
21.1 动态TLS 509
21.2 静态TLS 513
第22章 插入DLL和挂接API 515
22.1 插入DLL:一个例子 515
22.2 使用注册表来插入DLL 517
22.3 使用Windows挂钩来插入DLL 518
22.4 使用远程线程来插入DLL 531
22.4.1 Inject Library 示例应用程序 534
22.4.2 Image Walk DLL 541
22.5 使用特洛伊DLL来插入DLL 544
22.6 将DLL作为调试程序来插入 544
22.7 用Windows 98上的内存映射文件
插入代码 544
22.8 用CreateProcess插入代码 544
22.9 挂接API的一个示例 545
22.9.1 通过改写代码来挂接API 546
22.9.2 通过操作模块的输入节来挂接API 546
22.9.3 LastMsgBoxInfo示例应用程序 549
第五部分 结构化异常处理
第23章 结束处理程序 565
23.1 通过例子理解结束处理程序 566
23.2 Funcenstein1 566
23.3 Funcenstein2 566
23.4 Funcenstein3 568
23.5 Funcfurter1 568
23.6 突击测验:FuncaDoodleDoo 569
23.7 Funcenstein4 570
23.8 Funcarama1 571
23.9 Funcarama2 572
23.10 Funcarama3 572
23.11 Funcarama4:最终的边界 573
23.12 关于finally块的说明 574
23.13 Funcfurter2 575
23.14 SEH结束处理示例程序 576
第24章 异常处理程序和软件异常 578
24.1 通过例子理解异常过滤器和异常处理
程序 578
24.1.1 Funcmeister1 578
24.1.2 Funcmeister2 579
24.2 EXCEPTION_EXECUTE_HANDLER 580
24.2.1 一些有用的例子 581
24.2.2 全局展开 583
24.2.3 暂停全局展开 585
24.3 EXCEPTION_CONTINUE_
EXECUTION 586
24.4 EXCEPTION_CONTINUE_
SEARCH 588
24.5 Get Exception Code 589
24.6 Get Exception Information 592
24.7 软件异常 595
第25章 未处理异常和C++异常 598
25.1 即时调试 600
25.2 关闭异常消息框 601
25.2.1 强制进程终止运行 601
25.2.2 包装一个线程函数 601
25.2.3 包装所有的线程函数 601
25.2.4 自动调用调试程序 602
25.3 程序员自己调用UnhandledException
Filter 602
25.4 UnhandledExceptionFilter函数的一些
细节 603
25.5 异常与调试程序 604
25.6 C++异常与结构性异常的对比 618
第六部分 窗 口
第26章 窗口消息 623
26.1 线程的消息队列 623
26.2 将消息发送到线程的消息队列中 625
26.3 向窗口发送消息 626
26.4 唤醒一个线程 630
26.4.1 队列状态标志 630
26.4.2 从线程的队列中提取消息的
算法 631
26.4.3 利用内核对象或队列状态标
志唤醒线程 634
26.5 通过消息发送数据 636
26.6 Windows如何处理ANSI/Unicode
字符和字符串 642
第27章 硬件输入模型和局部输入状态 645
27.1 原始输入线程 645
27.2 局部输入状态 646
27.2.1 键盘输入与焦点 647
27.2.2 鼠标光标管理 649
27.3 将虚拟输入队列同局部输入状态挂接
在一起 651
27.3.1 LISLab 示例程序 652
27.3.2 LISWatch 示例程序 666
第七部分 附 录
附录A 建立环境 675
附录B 消息分流器、子控件宏和API宏 686
❹ windows 核心编程第四章中的一段代码,我不能正确编译,请帮我看看什么问题,急急急!!!!!
日文不懂,不过意思猜到是:错误: unresolved external symbol _main
原因是你的你的程序类型和入口函数不匹配,编译器根据类型在查找它认为的入口函数main,而你给出的是WinMain,他不认识。
解决方案:
1.试试看在[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:console改成/subsystem:windows
2.或者用向导建立一个windows程序,把你的代码粘过去覆盖原来的WinMain函数
3.或者把你的WinMain改成main试试看
❺ 关于windows核心编程中IAT修改的那段代码
++++++++++++++
❻ windows核心编程为什么使用c++
最简单的回答:因为C++最适合于操作系统的核心功能的编写。
------------以下是一些相关常识,仅供参考---------
1、编程语言从贴近机器去分,一般分高级编程语言和低级编程语言。
2、低级编程语言其实很少的,基本上就是汇编的代名词,当然还有更低级的,那就是机器码直接编程了。
3、机器码编程基本上是不靠谱的,没人能把一群的数字记在脑里并进行五花八门的组合。
4、汇编是最贴近机器代码的,它的一个指令基本上就对应着机器码的一个指令,所以,从理论上说,它能发挥出机器的最高性能、最多功能。但是,这只是理论上,事实上,如果纯它用,将完全不能发挥机器的最高性能因为当前的计算机技术下,没有任何一个人,没有任何一个团队能用汇编去完成一个稍微复杂一点点儿的功能。在当前,汇编仅应用于特定接口工作的开发,以及一些高级语言不能或不便完成的代码编写。
5、所以,在近现代的计算机技术中,编程工作主要还是要由高级编程语言去完成,编写完后,由编译器进行转译成计算机能够执行的机器码,或机算机能依托某种软件应用环境边解释成机器码边执行的中间码。当然,也存在一些根本就不转译,直接在环境中,边解释边执行(比如JAVA就是典型的)。
6、C++这个语系对内存地址可以进行直接的操作,包括读、写,这种动作类似于直接向机器发出指令。所以,C++在高级语言中相对来说是比较贴近机器的。而且C++的几个编程环境编写出的程序是真正译成机器码的,可以不依托“运行环境”让计算机依要求动作。当然,有这个特点的不只是C++,还有别的语系,比如使用Pasic系的Delphi编程环境。不过,C++的更传统用户群更多,而且简洁自由(有时自由过头,故障排查相对难),得到了更多专业人员的喜爱。
❼ 怎么学习《windows核心编程》
不要一开始就学这一本书,这是给高手学的,
如果你刚学完数据结构就学这本书是没法看懂的,
我的建议是,先看<<windows程序设计>>这本书,现在好像已经出到第五版了。
刚开始学的时候不需要看懂全部,只需要看懂前面的消息机制(一定要看懂),
然后自己能照着书中的代码写出一个窗口就行了(不用记住代码,但至少你要能把代码输入好,并编译完成,程序运行正常,到这,这本书可以先放下,当然,后面的能呓懂最好能看下去,不能看懂,也要浏览一下,知道大概讲的什么,。
然后去下载 孙鑫的<<VC++从入门到精通>>的视频,看完后再回头看<<windows程序设计>>
看破完后你就可以看<<windows核心编程>>了
当然,就要很久的时间,我就用了差不多一年
❽ Windows 核心编程的目录
第1部分 必备知识
第1章 错误处理
1.1 定义自己的错误代码
1.2 ErrorShow示例程序
第2章 字符和字符串处理
2.1 字符编码
2.2 ANSI字符和Unicode字符与字符串数据类型
2.3 Windows中的Unicode函数和ANSI函数
2.4 C运行库中的Unicode函数和ANSI函数
2.5 C运行库中的安全字符串函数
2.5.1 初识新的安全字符串函数
2.5.2 在处理字符串时如何获得更多控制
2.5.3 Windows字符串函数
2.6 为何要用Unicode
2.7 推荐的字符和字符串处理方式
2.8 Unicode与ANSI字符串转换
2.8.1 导出ANSI和Unicode DLL函数
2.8.2 判断文本是ANSI还是Unicode
第3章 内核对象
3.1 何为内核对象
3.1.1 使用计数
3.1.2 内核对象的安全性
3.2 进程内核对象句柄表
3.2.1 创建一个内核对象
3.2.2 关闭内核对象
3.3 跨进程边界共享内核对象
3.3.1 使用对象句柄继承
3.3.2 改变句柄的标志
3.3.3 为对象命名
3.3.4 终端服务命名空间
3.3.5 专有命名空间
3.3.5 复制对象句柄
第Ⅱ部分 工作机制
第4章 进程
4.1 编写第一个Windows应用程序
4.1.1 进程实例句柄
4.1.2 进程前一个实例的句柄
4.1.3 进程的命令行
4.1.4 进程的环境变量
4.1.5 进程的关联性
4.1.6 进程的错误模式
4.1.7 进程当前所在的驱动器和目录
4.1.8 进程的当前目录
4.1.9 系统版本
4.2 CreateProcess函数
4.2.1 pszApplicationName和pszCommandLine参数
4.2.2 psaProcess,psaThread和bInheritHandles参数
4.2.3 fdwCreate参数
4.2.4 pvEnvironment参数
4.2.5 pszCurDir参数
4.2.6 psiStartInfo参数
4.2.7 ppiProcInfo参数
4.3 终止进程
4.3.1 主线程的入口点函数返回
4.3.2 ExitProcess函数
4.3.3 TerminateProcess函数
4.3.4 当进程中的所有线程终止时
4.3.5 当进程终止运行时
4.4 子进程
4.5 管理员以标准用户权限运行时
4.5.1 自动提升进程的权限
4.5.2 手动提升进程的权限
4.5.3 何为当前权限上下文
4.5.4 枚举系统中正在运行的进程
4.5.5 Process Information示例程序
第5章 作业
5.1 对作业中的进程施加限制
5.2 将进程放入作业中
5.3 终止作业中的所有线程查询作业统计信息
5.4 作业通知
5.6 Job Lab示例程序
第6章 线程基础
6.1 何时创建线程
6.2 何时不应该创建线程
6.3 编写第一个线程函数
6.4 CreateThread函数
6.4.1 psa参数
6.4.2 cbStackSize参数
6.4.3 pfnStartAddr和pvParam参数
6.4.4 dwCreateFlags
6.4.5 pdwThreadID7
6.5 终止运行线程
6.5.1 线程函数返回
6.5.2 ExitThread函数
6.5.3 TerminateThread函数
6.5.4 进程终止运行时
6.5.5 线程终止运行时
6.6 线程内幕
6.7 C/C++运行库注意事项
6.7.1 用_beginthreadex而不要用CreateThread创建线程
6.7.2 绝对不应该调用的C/C++运行库函数
6.8 了解自己的身份
6.8.1 将伪句柄转换为真正的句柄
第7章 线程调度、优先级和关联性
7.1 线程的挂起和恢复
7.2 进程的挂起和恢复
7.3 睡眠
7.4 切换到另一个线程
7.5 在超线程CPU上切换到另一个线程
7.6 线程的执行时间
7.7 在实际上下文中谈CONTEXT结构
7.8 线程优先级
7.9 从抽象角度看优先级
7.10 优先级编程
7.10.1 动态提升线程优先级
7.10.2 为前台进程微调调度程序
7.10.3 调度I/O请求优先级
7.10.4 Scheling Lab 示例程序
7.11 关联性
第8章 用户模式下的线程同步
8.1 原子访问:Interlocked系列函数
8.2 高速缓存行
8.3 高级线程同步需要避免使用的一种方法
8.4 关键段
8.4.1 关键段:细节
8.4.2 关键段和旋转锁
8.4.3 关键段和错误处理
8.5 Slim读/写锁
8.6 条件变量
8.6.1 Queue示例程序
8.6.2 在停止线程时的死锁问题
8.6.3 一些有用的窍门和技巧
第9章 用内核对象进行线程同步
9.1 等待函数
9.2 等待成功所引起的副作用
9.3 事件内核对象
9.4 可等待的计时器内核对象
9.4.1 让可等待的计时器添加APC调用
9.4.2 计时器的剩余问题
9.5 信号量内核对象
9.6 互斥量内核对象
9.6.1 遗弃问题
9.6.2 互斥量与关键段的比较
9.6.3 Queue示例程序
9.7 线程同步对象速查表
9.8 其他的线程同步函数
9.8.1 异步设备I/O
9.8.2 WaitForInputIdle函数
9.8.3 MsgWaitForMultipleObjects(Ex)函数
9.8.4 WaitForDebugEvent函数
9.8.5 SignalObjectAndWait函数
9.8.6 使用等待链遍历API来检测死锁
第10章 同步设备I/O与异步设备I/O
10.1 打开和关闭设备细看CreateFile函数
10.2 使用文件设备
10.2.1 取得文件的大小
10.2.2 设置文件指针的位置
10.2.3 设置文件尾
10.3 执行同步设备I/O
10.3.1 将数据刷新至设备
10.3.2 同步I/O的取消
10.4 异步设备I/O基础
10.4.1 OVERLAPPED结构
10.4.2 异步设备I/O的注意事项
10.4.3 取消队列中的设备I/O请求
10.5 接收I/O请求完成通知
10.5.1 触发设备内核对象
10.5.2 触发事件内核对象
10.5.3 可提醒I/O
10.5.4 I/O完成端口
10.5.5 模拟已完成的I/O请求
第11章 Windows线程池
11.1 情形1:以异步方式调用函数
11.1.1 显式地控制工作项
11.1.2 Batch示例程序
11.2 情形2:每隔一段时间调用一个函数
11.3 情形3:在内核对象触发时调用一个函数
11.4 情形4:在异步I/O请求完成时调用一个函数
11.5 回调函数的终止操作
11.5.1 对线程池进行定制
11.5.2 得体地销毁线程池:清理组
第12章 纤程
第Ⅲ部分 内存管理
第13章 Windows内存体系结构
13.1 进程的虚拟地址空间
13.2 虚拟地址空间的分区
13.2.1 空指针赋值分区
13.2.2 用户模式分区
13.3 地址空间中的区域
13.4 给区域调拨物理存储器
13.5 物理存储器和页交换文件
13.6 页面保护属性
13.6.1 写时复制
13.6.2 一些特殊的访问保护属性标志
13.7 实例分析
13.8 数据对齐的重要性
第14章 探索虚拟内存
14.1 系统信息
14.2 虚拟内存状态
14.3 NUMA机器中的内存管理
14.4 确定地址空间的状态
14.4.1 VMQuery函数
14.4.2 示例程序:虚拟内存映射
第15章 在应用程序中使用虚拟内存
15.1 预订地址空间区域
15.2 给区域调拨物理存储器
15.3 同时预订和调拨物理存储器
15.4 何时调拨物理存储器
15.5 撤销调拨物理存储器及释放区
15.5.1 何时撤销调拨物理存储器
15.5.2 虚拟内存分配示例程序
15.6 改变保护属性
15.7 重置物理存储器的内容
15.8 地址窗口扩展
第16章 线程栈
16.1 C/C++运行库的栈检查函数
16.2 Summation示例程序
第17章 内存映射文件
17.1 映射到内存的可执行文件和DLL
17.1.1 同一个可执行文件或DLL的多个实例不会共享静态数据
17.1.2 在同一个可执行文件或DLL的多个实例间共享静态数据
17.1.3 Application Instances示例程序
17.2 映射到内存的数据文件
17.2.1 方法1:一个文件,一块缓存
17.2.2 方法2:两个文件,一块缓存
17.2.3 方法3:一个文件,两块缓存
17.2.4 方法4:一个文件,零个缓存
17.3 使用内存映射文件
17.3.1 第1步:创建或打开文件内核对象
17.3.2 第2步:创建文件映射内核对象
17.3.3 第3步:将文件的数据映射到进程的地址空间
17.3.4 第4步:从进程的地址空间撤销对文件数据的映射
17.3.5 第5步和第6步:关闭文件映射对象和文件对象
17.6 File Reverse示例程序
17.7 用内存映射文件来处理大文件
17.8 内存映射文件和一致性
17.9 给内存映射文件指定基地址
17.10 内存映射文件的实现细节
第18章 堆
18.1 进程的默认堆
18.2 为什么要创建额外的堆
18.2.1 对组件进行保护
18.2.2 更有效的内存管理
18.2.3 使内存访问局部化
18.2.4 避免线程同步的开销
18.2.5 快速释放
18.3 如何创建额外的堆
18.3.1 从堆中分配内存块
18.3.2 调整内存块的大小
18.3.3 获得内存块的大小
18.3.4 释放内存块
18.3.5 销毁堆
18.3.6 在C++中使用堆
18.4 其他堆函数
第Ⅳ部分 动态链接库
第19章 DLL基础
19.1 DLL和进程的地址空间
19.2 纵观全局
19.2.1 构建DLL模块
19.2.2 构建可执行模块
19.2.3 运行可执行模块
第20章 DLL高级技术
20.1 DLL模块的显式载入和符号链接
20.1.1 显式地载入DLL模块
20.1.2 显式地卸载DLL模块
20.1.3 显式地链接到导出符号
20.2 DLL的入口点函数
20.2.1 DLL_PROCESS_ATTACH通知
20.2.2 DLL_PROCESS_DETACH通知
20.2.3 DLL_THREAD_ATTACH通知
20.2.4 DLL_THREAD_DETACH通知
20.2.5 DllMain的序列化调用
20.2.6 DllMain和C/C++运行库
20.3 延迟载入DLL
20.4 函数转发器
20.5 已知的DLL
20.6 DLL重定向
20.7 模块的基地址重定位
20.8 模块的绑定
第21章 线程局部存储区
21.1 动态TLS
21.2 静态TLS0
第22章 DLL注入和API拦截
22.1 DLL注入的一个例子
22.2 使用注册表来注入DLL
22.3 使用Windows挂钩来注入DLL
22.4 使用远程线程来注入DLL
22.4.1 Inject Library示例程序
22.4.2 Image Walk DLL
22.5 使用木马DLL来注入DLL
22.6 把DLL作为调试器来注入
22.7 使用CreateProcess来注入代码
22.8 API拦截的一个例子9
22.8.1 通过覆盖代码来拦截API0
22.8.2 通过修改模块的导入段来拦截API
22.8.3 Last MessageBox Info示例程序
第Ⅴ部分 结构化异常处理
第23章 终止处理程序
第24章 异常处理程序与软件异常
24.1 通过实例理解异常过滤程序和异常处理程序
24.1.1 Funcmeister1函数
24.1.2 Funcmeister2函数
24.2 EXCEPTION_EXECUTE_HANDLER1
24.2.1 一些有用的例子
24.2.2 全局展开
24.2.3 停止全局展开
24.3 EXCEPTION_CONTINUE_EXECUTION
24.4 EXCEPTION_CONTINUE_SEARCH0
24.5 GetExceptionCode2
24.6 GetExceptionInformation6
24.7 软件异常
第25章 未处理异常、向量化异常处理与C++异常
25.1 UnhandledExceptionFilter函数详解
25.2 即时调试
25.3 电子表格示例程序
25.4 向量化异常和继续处理程序
25.5 C++异常与结构化异常的比较
25.6 异常与调试器
第26章 错误报告与应用程序恢复
26.1 Windows错误报告控制台
26.2 可编程的Windows错误报告
26.3 对进程中所有的问题报告进行定制
26.4 问题报告的创建与定制
26.4.1 创建一个自定义的问题报告
26.4.2 设置报告参数:WerReportSetParameter
26.4.3 将小型转储文件放入报告:WerReportAddDump8
26.4.4 将任意文件放入报告:WerReportAddFile9
26.4.5 修改对话框文本:WerReportSetUIOption0
26.4.6 提交错误报告:WerReportSubmit0
26.4.7 关闭问题报告:WerReportCloseHandle
26.4.8 Customized WER示例程序
26.5 应用程序的自动重启与恢复
26.5.1 应用程序的自动重启
26.5.2 对应用程序恢复的支持
第Ⅵ部分
附录A 构建环境
附录B 消息处理宏、子控件宏和API宏
索引
❾ windows核心编程怎么都看不懂 刚掌握c和c++
Tip 1 不妨动手
操作系统应用程序编程,需要一些贮备知识,但需要多少,说不清楚。Windows核心编程有丰富的例子,不妨编译下,运行下,改改,看看有什么效果,慢慢就会学会。
Tip 2 贮备知识
编程方面,Windows编程,本质上是API编程,就像你使用stdlib等等里面的malloc\free一样,Windows SDK提供了丰富的函数供你使用系统资源。那么,编程,你就需要熟悉API编程。不妨,写一个通用链表,可以容纳任何数据类型,支持头出头进,尾出尾进,单元素进,多元素进,索引访问,递归访问等等。这里链表相当于你自己开发的API库,然后用在通讯录管理、图书管理,等经典大学课设里面。这样你就明白,Windows函数与你自己的链表函数,本质上没啥区别。
知识方面,计算机基础,操作系统原理,不用细看,大概网络看看就行,知道是个什么东西。然后具体的知识,其实就是Windows核心编程要教授的内容啊!!!!学过这本书后,其他操作系统应用程序编程大同小异。其他操作系统的工作方式也大同小异。关键要知道,内存,虚拟内存,线程,进程,同步方法,通讯方法等等。思考一个问题,为啥这本书里有很多同步技术,为啥没有异步技术呢?
❿ windows 核心编程第五版的源代码程序能在winXP上的VC6.0或vs2005上运行么
你安装vs2008的企业版就可以使用,winxp系统可以运行,vistal系统也可以,主要是vs2008的
sdk.
我用的就是vs2008版本的,可以使用源代码程序。
本人就是XP下环境运行的,不一定必须是vista