图书介绍
Windows核心编程2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

- (美)J.里克特(Jeffrey Richter)著;王建华等译 著
- 出版社: 北京:机械工业出版社
- ISBN:7111079450
- 出版时间:2000
- 标注页数:689页
- 文件大小:52MB
- 文件页数:703页
- 主题词:Windows
PDF下载
下载说明
Windows核心编程PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第一部分 程序员必读1
第1章 对程序错误的处理1
1.1 定义自己的错误代码4
1.2 ErrorShow示例应用程序5
第2章 Unicode11
2.1 字符集11
2.1.1 单字节与双字节字符集11
2.1.2 Unicode:宽字节字符集12
2.4 Windows 98与Unicode13
2.3 Windows 2000与Unicode13
2.2 为什么使用Unicode13
2.5 Windows CE与Unicode14
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.9.1 Windows字符串函数19
2.9 成为符合ANSI和Unicode的应用程序19
2.8.4 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.1 创建内核对象30
3.2 进程的内核对象句柄表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
第二部分 编程的具体方法45
第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 CreateProess函数58
4.2.1 pszApplicationName和pszCommandLine59
4.2.2 psa Process、psa Thread和binherit Handles60
4.2.3 fdwCreate62
4.2.4 pvEnvironment64
4.2.5 pszCurDir64
4.2.6 psiStartInfo64
4.2.7 ppiProcInfo67
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.1 何时创建线程121
第6章 线程的基础知识121
6.2 何时不能创建线程122
6.3 编写第一个线程函数123
6.4 CreateThread函数124
6.4.1 psa124
6.4.2 cbStack124
6.4.3 pfnStartAddr和pvParam125
6.4.4 fdwCreate126
6.4.5 pdwThreadID126
6.5.3 Terminate Thread函数127
6.5.2 ExitThread函数127
6.5.1 线程函数返回127
6.5 终止线程的运行127
6.5.4 在进程终止运行时撤消线程128
6.5.5 线程终止运行时发生的操作128
6.6 线程的一些性质129
6.7 C/C++运行期库的考虑131
6.7.1 Oops——错误地调用了Create Thread138
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 Scheduling 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.3 Queue示例应用程序214
9.6.2 互斥对象与关键代码段的比较214
9.7 线程同步对象速查表223
9.8 其他的线程同步函数224
9.8.1 异步设备I/O224
9.8.2 WaiForInputIdle224
9.8.3 Msg WaitForMultipleObjects(Ex)225
9.8.4 WaiForDebugEvent225
9.8.5 SingleObjectAndWait226
第10章 线程同步工具包228
10.1 实现关键代码段:Optex228
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.1 进程的虚拟地址空间299
第三部分 内存管理299
第13章 Windows的内存结构299
13.2 虚拟地址空间如何分区300
13.2.1 NuLL指针分配的分区——适用于Windows 2000和Windows 98300
13.2.3 用户方式分区——适用于Windows 2000和Windows 98301
25.2.2 包装一个线程函数301
13.2.2 MS-DOS/16位Windows应用程序兼容分区——仅适用于Windows 98301
13.2.4 64KB禁止进入的分区——仅适用于Windows 2000302
13.2.5 共享的MMF分区——仅适用于Windows 98303
13.2.6 内核方式分区——适用于Windows 2000和Windows 98303
13.3 地址空间中的区域303
13.5 物理存储器与页文件304
13.4 提交地址空间区域中的物理存储器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 2000372
第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 可执行文件或DL的多个实例不能共享静态数据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.3 了解内存块的大小456
18.3.2 改变内存块的大小456
18.3.4 释放内存块457
18.3.5 撤消堆栈457
18.3.6 用C++程序来使用堆栈457
18.4 其他堆栈函数460
第四部分 动态链接库463
第19章 DLL基础463
19.1 DLL与进程的地址空间464
19.2 DLL的总体运行情况465
19.3 创建DLL模块467
19.3.1 输出的真正含义是什么469
19.3.2 创建用于非Visual C++工具的DLL471
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 顺序调用DllMain486
20.2.6 DllMain与C/C++运行期库488
20.3 延迟加载DLL489
20.5 已知的DLL499
20.4 函数转发器499
20.6 DLL转移500
20.7 改变模块的位置501
20.8 绑定模块506
21.1 动态TLS509
第21章 线程本地存储器509
21.2 静态TLS513
第22章 插入DLL和挂接API515
22.1 插入DLL:一个例子515
22.2 使用注册表来插入DLL517
22.3 使用Windows挂钩来插入DLL518
22.4 使用远程线程来插入DLL531
22.4.1 Inject Library示例应用程序534
22.4.2 Image Walk DLL541
22.5 使用特洛伊DLL来插入DLL544
22.6 将DLL作为调试程序来插入544
22.7 用Windows 98上的内存映射文件插入代码544
22.8 用CreateProcess插入代码544
22.9 挂接API的一个示例545
22.9.1 通过改写代码来挂接API546
22.9.2 通过操作模块的输入节来挂接API546
22.9.3 LastMsgBoxInfo示例应用程序549
第23章 结束处理程序565
第五部分 结构化异常处理565
23.3 Funcenstein2566
23.1 通过例子理解结束处理程序566
23.2 Funcenste1566
23.4 Funcenstein3568
23.5 Funcfurter1568
23.6 突击测验:FuncaDoodleDoo569
23.7 Funcenstein4570
23.8 Funcarama1571
23.9 Funcarama2572
23.10 Funcarama3572
23.11 Funcarama4:最终的边界573
23.12 关于finally块的说明574
23.13 Funcfurter2575
23.14 SEH结束处理示例程序576
第24章 异常处理程序和软件异常578
24.1 通过例子理解异常过滤器和异常处理程序578
24.1.1 Funcmeister1578
24.1.2 Funcmeister2579
24.2 EXCEPTION_EXECUTE_HANDLER580
24.2.1 一些有用的例子581
24.2.2 全局展开583
24.2.3 暂停全局展开585
24.3 EXCEPTION_CONTINUE_EXECUTION586
24.4 EXCEPTION_CONTINUE_SEARCH588
24.5 Get Exception Code589
24.6 Get Exception Information592
24.7 软件异常595
第25章 未处理异常和C++异常598
25.1 即时调试600
25.2.3 包装所有的线程函数601
25.2 关闭异常消息框601
25.2.1 强制进程终止运行601
25.2.4 自动调用调试程序602
25.3 程序员自己调用UnbandledException602
25.4 UnhandleExceptionFilter函数的一些细节603
25.5 异常与调试程序604
25.6 C++异常与结构性异常的对比618
26.1 线程的消息队列623
第26章 窗口消息623
第六部分 窗口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.1 原始输入线程645
第27章 硬件输入模型和局部输入状态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
第七部分 附录675
附录A 建立环境675
附录B 消息分流器、子控件宏和API宏686
热门推荐
- 1665263.html
- 2642202.html
- 2907115.html
- 2731798.html
- 1041765.html
- 1112309.html
- 3891260.html
- 119452.html
- 2015918.html
- 2830928.html
- http://www.ickdjs.cc/book_2722957.html
- http://www.ickdjs.cc/book_2147937.html
- http://www.ickdjs.cc/book_2225215.html
- http://www.ickdjs.cc/book_3682898.html
- http://www.ickdjs.cc/book_3387824.html
- http://www.ickdjs.cc/book_1165000.html
- http://www.ickdjs.cc/book_1323247.html
- http://www.ickdjs.cc/book_3850368.html
- http://www.ickdjs.cc/book_912947.html
- http://www.ickdjs.cc/book_2624115.html