书籍详情

Windows核心编程

Windows核心编程

作者:(美)Jeffrey Richter(J.理查特)著;王建华[等]译;王建华译

出版社:机械工业出版社

出版时间:2005-09-01

ISBN:9787111079453

定价:¥86.00

购买这本书可以去
内容简介
  本书是讲解Windows 操作系统内部机制的专著,作者从基本概念入手,全面系统地介绍了Windows的各种基本构件,如进程、线程、DLL和内存管理等,并列举了大量应用程序,精辟地分析了构件的使用方法,为掌握Windows 编程技巧提供了一条有效的捷径。对于不同水平的Windows 编程人员来说,本书都具有极好的参考价值。
作者简介
  JeffreyRichterJeffreyRichter是一位在全球享有盛誉的技术作家,尤其在Windows/.NET领域有着杰出的贡献。他的第一本Windows著作Windows3:ADeveloper'sGuide大获好评,从而声名远扬。之后,他又推出了经典著作《Windows高级编程指南》和《Windows核心编程》。如今这两本书早已成为Windows程序设计领域的颠峰之作,培育了几代软件开发设计人员。他的每一本新作问世,我们都有理由相信这是一本巨著,我们想要的一切尽在其中。Jeffery是Wintellect公司的创始人之一,也是MSDN杂志.NET专栏的特邀编辑。现在他正领导开发该公司的.NET程序设计课程,向大众推广.NET技术。因为他自1999年开始就参与了微软.NET框架开发组的咨询工作,与这些一线人员一起经历了.NET的孕育与诞生,所以他对.NET思想的领悟、对.NET的细节熟稔,是其他任何作家难以企及的。他是.NET著作领域中当之无愧的一面旗帜。>>更多作品
目录
译者序
前言
第一部分 程序员必读
第1章 对程序错误的处理
1.1 定义自己的错误代码
1.2 ErrorShow示例应用程序
第2章 Unicode
2.1 字符集
2.1.1 单字节与双字节字符集
2.1.2 Unicode:宽字节字符集
2.2 为什么使用Unicode
2.3 Windows 2000与Unicode
2.4 Windows 98与Unicode
2.5 Windows CE与Unicode
2.6 需要注意的问题
2.7 对COM的简单说明
2.8 如何编写Unicode源代码
2.8.1 C运行期库对Unicode的支持
2.8.2 Windows定义的Unicode数据类型
2.8.3 Windows中的Unicode函数和ANSI函数
2.8.4 Windows字符串函数
2.9 成为符合ANSI和Unicode的应用程序
2.9.1 Windows字符串函数
2.9.2 资源
2.9.3 确定文本是ANSI文本还是Unicode文本
2.9.4 在Unicode与ANSI之间转换字符串
第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 复制对象句柄
第二部分 编程的具体方法
第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 psa Process、psa Thread和binherit Handles
4.2.3 fdwCreate
4.2.4 pvEnvironment
4.2.5 pszCurDir
4.2.6 psiStartlnfo
4.2.7 ppiProclnfo
4.3 终止进程的运行
4.3.1 主线程的进入点函数返回
4.3.2 ExitProcess函数
4.3.3 TerminateProcess函数
4.3.4 进程终止运行时出现的情况
4.4 子进程
4.5 枚举系统中运行的进程
第5章 作业
5.1 对作业进程的限制
5.2 将进程放入作业
5.3 终止作业中所有进程的运行
5.4 查询作业统计信息
5.5 作业通知信息
5.6 JobLab示例应用程序
第6章 线程的基础知识
6.1 何时创建线程
6.2 何时不能创建线程
6.3 编写第一个线程函数
6.4 CreateThread函数
6.4.1 psa
6.4.2 cbStack
6.4.3 pfnStartAddr和pvParam
6.4.4 fdwCreate
6.4.5 pdwThreadID
6.5 终止线程的运行
6.5.1 线程函数返回
6.5.2 ExiThread函数
6.5.3 TerminateThread函数
6.5.4 在进程终止运行时撤消线程
6.5.5 线程终止运行时发生的操作
6.6 线程的一些性质
6.7 C/C++运行期库的考虑
6.7.1 Oops——错误地调用了CreateThread
6.7.2 不应该调用的C/C++运行期库函数
6.8 对自己的ID概念应该有所了解
第7章 线程的调度、优先级和亲缘性
7.1 暂停和恢复线程的运行
7.2 暂停和恢复进程的运行
7.3 睡眠方式
7.4 转换到另一个线程
7.5 线程的运行时间
7.6 运用环境结构
7.7 线程的优先级
7.8 对优先级的抽象说明
7.9 程序的优先级
7.9.1 动态提高线程的优先级等级
7.9.2 为前台进程调整调度程序
7.9.3 Scheduling Lab示例应用程序
7.10 亲缘性
第8章 用户方式中线程的同步
8.1 原子访问:互锁的函数家族
8.2 高速缓存行
8.3 高级线程同步
8.4 关键代码段
8.4.1 关键代码段准确的描述
8.4.2 关键代码段与循环锁
8.4.3 关键代码段与错误处理
8.4.4 非常有用的提示和技巧
第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 SingleObjectAndWait
第10章 线程同步工具包
10.1 实现关键代码段:Optex
10.2 创建线程安全的数据类型和反信标
10.3 单个写入程序/多个阅读程序的保护
10.4 实现一个WaitForMultipleExpressions函数
第11章 线程池的使用
11.1 方案1:异步调用函数
11.2 方案2:按规定的时间间隔调用函数
11.3 方案3:当单个内核对象变为已通知状时调用函数
11.4 方案4:当异步I/O请求完成运行时调用函数
第12章 纤程
12.1 纤程的操作
12.2 Counter示例应用程序
第三部分 内存管理
第13章 Windows的内存结构
13.1 进程的虚拟地址空间
13.2 虚拟地址空间如何分区
13.2.1 NuLL指针分配的分区——适用于Windows 2000和Windows 98
13.2.2 MS-DOS/16位Windows应用程序兼容分区——仅适用Windows 98
13.2.3 用户方式分区——适用Windows 2000和Windows 98
13.2.4 64KB禁止进入的分区——仅适用于Windows 2000
13.2.5 共享的MMF分区——仅适用于Windows 98
13.2.6 内核方式分区——适用于Windows 2000和Windows 98
13.3 地址空间中的区域
13.4 提交地址空间区域中的物理存储器
13.5 物理存储器与页文件
13.6 保护属性
13.6.1 Copy-on-Write访问
13.6.2 特殊的访问保护属性的标志
13.7 综合使用所有的元素
13.7.1 区域的内部情况
13.7.2 与Windows 98地址空间的差别
13.8 数据对齐的重要性
第14章 虚拟内存
14.1 系统信息
14.2 虚拟内存的状态
14.3 确定地址空间的状态
14.3.1 VMQuery函数
14.3.2 虚拟内存表示例应用程序
第15章 在应用程序中使用虚拟内存
15.1 在地址空间中保留一个区域
15.2 在保留区域中的提交存储器
15.3 同时进行区域的保留和内存的提交
15.4 何时提交物理存储器
15.5 回收虚拟内存和释放地址空间区域
15.5.1 何时回收物理存储器
15.5.2 虚拟内存分配的示例应用程序
15.6 改变保护属性
15.7 清除物理存储器的内容
15.8 地址窗口扩展——适用于Windows 2000
第16章 线程的堆栈
16.1 Windows 98下的线程堆栈
16.2 C/C++运行期库的堆栈检查函数
16.3 Summation示例应用程序
第17章 内存映射文件
17.1 内存映射的可执行文件和DLL文件
17.1.1 可执行文件或DLL的多个实例不能共享静态数据
17.1.2 在可执行文件或DLL的多个实例之间共享静态数据
17.1.3 APPInst示例应用程序
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.3.6 文件倒序示例应用程序
17.4 使用内存映射文件来处理大文件
17.5 内存映射文件与数据视图的相关性
17.6 设定内存映射文件的基地址
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 DLL的总体运行情况
19.3 创建DLL模块
19.3.1 输出的真正含义是什么
19.3.2 创建用于非Visual C++工具的DLL
19.4 创建可执行模块
19.5 运行可执行模块
第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 DL_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 静态TLS
第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 用windows 98上的内存映射文件插入代码
22.8 用CreateProcess插入代码
22.9 挂接API的一个示例
22.9.1 通过改写代码来挂接API
22.9.2 通过操作模块的输入节来挂接API冈
22.9.3 LastMsgBoxInfo示例应用程序
第五部分 结构化异常处理
第23章 结束处理程序
23.1 通过例子理解结束处理程序
23.2 Funcensteinl
23.3 Funcenstein2
23.4 Funcenstein3
23.5 Funcfurter1
23.6 突击测验:FuncaDoodleDoo
23.7 Funcenstein4
23.8 Funcaramal
23.9 Funcarama2
23.10 Funcarama3
23.11 Funcarama4:最终的边界
23.12 关于finally块的说明
23.13 Funcfurter2
23.14 SEH结束处理示例程序
第24章 异常处理程序和软件异常
24.1 通过例子理解异常过滤器和异常处理程序
24.1.1 Funcmeister1
24.1.2 Funcmeister2
24.2 EXCEPTION_EXECUTE_HANDLER
24.2.1 一些有用的例子
24.2.2 全局展开
24.2.3 暂停全局展开
24.3 EXCEPTION_CONTINUE_EXECUTION
24.4 EXCEPTION_CONTINUE_SEARCH
24.5 Get Exception Code
24.6 Get Exception Information
24.7 软件异常
第25章 未处理异常和C++异常
25.1 即时调试
25.2 关闭异常消息框
25.2.1 强制进程终止运行
25.2.2 包装一个线程函数
25.2.3 包装所有的线程函数
25.2.4 自动调用调试程序
25.3 程序员自己调用UnhandledExceptionFilter
25.4 UnhandledExceptionFilter函数的一些细节
25.5 异常与调试程序
25.6 C++异常与结构性异常的对比
第六部分 窗口
第26章 窗口消息
26.1 线程的消息队列
26.2 将消息发送到线程的消息队列中
26.3 向窗口发送消息
26.4 唤醒一个线程
26.4.1 队列状态标志
26.4.2 从线程的队列中提取消息的算法
26.4.3 利用内核对象或队列状态标志唤醒线程
26.5 通过消息发送数据
26.6 Windows如何处理ANSI/Unicode字符和字符串
第27章 硬件输入模型和局部输入状态
27.1 原始输入线程
27.2 局部输入状态
27.2.1 键盘输入与焦点
27.2.2 鼠标光标管理
27.3 将虚拟输入队列同局部输入状态挂接在一起
27.3.1 LISLab示例程序
27.3.2 LISWatch示例程序
第七部分 附录
附录A 建立环境
附录B 消息分流器、子控件宏和API宏
猜您喜欢

读书导航