Windows核心编程(第版)

这是一本经典的Windows核心编程指南,从第1版到第5版,引领着数十万程序员走入Windows开发阵营,培养了大批精英。
作为Windows开发人员的必备参考,本书是为打算理解Windows的C和C程序员精心设计的。第5版全面覆盖WindowsXP,WindowsVista和WindowsServer2008中的170个新增函数和Windows特性。书中还讲解了Windows系统如何使用这些特性,我们开发的应用程序又如何充分使用这些特性,如何自行创建新的特性。

作者简介

JeffreyRichter是Wintellect公司的创始人之一,该公司从事培训、调试和咨询,致力于帮助其他公司以更快的速度开发出更优秀的软件。他著作颇丰,代表作有畅销书CLRviaC#。他还是MSDNMagazine的特约编辑和专栏作家。


------------------
目录

第Ⅰ部分 必备知识
第1章错误处理
1.1定义自己的错误代码
1.2ErrorShow示例程序
第2章字符和字符串处理
2.1字符编码
2.2ANSI字符和Unicode字符与字符串数据类型
2.3Windows中的Unicode函数和ANSI函数
2.4C运行库中的Unicode函数和ANSI函数
2.5C运行库中的安全字符串函数
2.5.1初识新的安全字符串函数
2.5.2在处理字符串时如何获得更多控制
2.5.3Windows字符串函数
2.6为何要用Unicode
2.7推荐的字符和字符串处理方式
2.8Unicode与ANSI字符串转换
2.8.1导出ANSI和UnicodeDLL函数
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.2CreateProcess函数
4.2.1pszApplicationName和pszCommandLine参数
4.2.2psaProcess,psaThread和bInheritHandles参数
4.2.3fdwCreate参数
4.2.4pvEnvironment参数
4.2.5pszCurDir参数
4.2.6psiStartInfo参数
4.2.7ppiProcInfo参数
4.3终止进程
4.3.1主线程的入口点函数返回
4.3.2ExitProcess函数
4.3.3TerminateProcess函数
4.3.4当进程中的所有线程终止时
4.3.5当进程终止运行时
4.4子进程
4.5管理员以标准用户权限运行时
4.5.1自动提升进程的权限
4.5.2手动提升进程的权限
4.5.3何为当前权限上下文
4.5.4枚举系统中正在运行的进程
4.5.5ProcessInformation示例程序
第5章作业
5.1对作业中的进程施加限制
5.2将进程放入作业中
5.3终止作业中的所有线程查询作业统计信息
5.4作业通知
5.6JobLab示例程序
第6章线程基础
6.1何时创建线程
6.2何时不应该创建线程
6.3编写第一个线程函数
6.4CreateThread函数
6.4.1psa参数
6.4.2cbStackSize参数
6.4.3pfnStartAddr和pvParam参数
6.4.4dwCreateFlags
6.4.5pdwThreadID7
6.5终止运行线程
6.5.1线程函数返回
6.5.2ExitThread函数
6.5.3TerminateThread函数
6.5.4进程终止运行时
6.5.5线程终止运行时
6.6线程内幕
6.7C/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.4SchedulingLab示例程序
7.11关联性
第8章用户模式下的线程同步
8.1原子访问:Interlocked系列函数
8.2高速缓存行
8.3高级线程同步需要避免使用的一种方法
8.4关键段
8.4.1关键段:细节
8.4.2关键段和旋转锁
8.4.3关键段和错误处理
8.5Slim读/写锁
8.6条件变量
8.6.1Queue示例程序
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.3Queue示例程序
9.7线程同步对象速查表
9.8其他的线程同步函数
9.8.1异步设备I/O
9.8.2WaitForInputIdle函数
9.8.3MsgWaitForMultipleObjects(Ex)函数
9.8.4WaitForDebugEvent函数
9.8.5SignalObjectAndWait函数
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.1OVERLAPPED结构
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.4I/O完成端口
10.5.5模拟已完成的I/O请求
第11章Windows线程池
11.1情形1:以异步方式调用函数
11.1.1显式地控制工作项
11.1.2Batch示例程序
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.3NUMA机器中的内存管理
14.4确定地址空间的状态
14.4.1VMQuery函数
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.1C/C运行库的栈检查函数
16.2Summation示例程序
第17章内存映射文件
17.1映射到内存的可执行文件和DLL
17.1.1同一个可执行文件或DLL的多个实例不会共享静态数据
17.1.2在同一个可执行文件或DLL的多个实例间共享静态数据
17.1.3ApplicationInstances示例程序
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.6FileReverse示例程序
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.1DLL和进程的地址空间
19.2纵观全局
19.2.1构建DLL模块
19.2.2构建可执行模块
19.2.3运行可执行模块
第20章DLL高级技术 20.1DLL模块的显式载入和符号链接
20.1.1显式地载入DLL模块
20.1.2显式地卸载DLL模块
20.1.3显式地链接到导出符号
20.2DLL的入口点函数
20.2.1DLL_PROCESS_ATTACH通知
20.2.2DLL_PROCESS_DETACH通知
20.2.3DLL_THREAD_ATTACH通知
20.2.4DLL_THREAD_DETACH通知
20.2.5DllMain的序列化调用
20.2.6DllMain和C/C运行库
20.3延迟载入DLL
20.4函数转发器
20.5已知的DLL
20.6DLL重定向
20.7模块的基地址重定位
20.8模块的绑定
第21章线程局部存储区
21.1动态TLS
21.2静态TLS0
第22章DLL注入和API拦截
22.1DLL注入的一个例子
22.2使用注册表来注入DLL
22.3使用Windows挂钩来注入DLL
22.4使用远程线程来注入DLL
22.4.1InjectLibrary示例程序
22.4.2ImageWalkDLL
22.5使用木马DLL来注入DLL
22.6把DLL作为调试器来注入
22.7使用CreateProcess来注入代码
22.8API拦截的一个例子9
22.8.1通过覆盖代码来拦截API0
22.8.2通过修改模块的导入段来拦截API
22.8.3LastMessageBoxInfo示例程序
第Ⅴ部分结构化异常处理
第23章终止处理程序
第24章异常处理程序与软件异常
24.1通过实例理解异常过滤程序和异常处理程序
24.1.1Funcmeister1函数
24.1.2Funcmeister2函数
24.2EXCEPTION_EXECUTE_HANDLER1
24.2.1一些有用的例子
24.2.2全局展开
24.2.3停止全局展开
24.3EXCEPTION_CONTINUE_EXECUTION
24.4EXCEPTION_CONTINUE_SEARCH0
24.5GetExceptionCode2
24.6GetExceptionInformation6
24.7软件异常
第25章未处理异常、向量化异常处理与C异常
25.1UnhandledExceptionFilter函数详解
25.2即时调试
25.3电子表格示例程序
25.4向量化异常和继续处理程序
25.5C异常与结构化异常的比较
25.6异常与调试器
第26章错误报告与应用程序恢复
26.1Windows错误报告控制台
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.8CustomizedWER示例程序
26.5应用程序的自动重启与恢复
26.5.1应用程序的自动重启
26.5.2对应用程序恢复的支持
第Ⅵ部分
附录A构建环境
附录B消息处理宏、子控件宏和API宏
索引

#现在前往

精选留言

Windows,核心,编程,第版
sample
2020-09-23
写留言
签到
投稿
QQ咨询
返回顶部