王朝网络
分享
 
 
 

Windows 核心编程:原书第4版

王朝导购·作者佚名
 
Windows 核心编程:原书第4版  点此进入淘宝搜索页搜索
  特别声明:本站仅为商品信息简介,并不出售商品,您可点击文中链接进入淘宝网搜索页搜索该商品,有任何问题请与具体淘宝商家联系。
  参考价格: 点此进入淘宝搜索页搜索
  分类: 图书,计算机/网络,操作系统/系统开发,WINDOWS,

作者: (美)理查德著,黄陇,李虎译

出 版 社: 机械工业出版社

出版时间: 2008-5-1字数:版次: 1页数: 728印刷时间: 2008/05/01开本: 16开印次: 1纸张: 胶版纸I S B N : 9787111237914包装: 平装编辑推荐

大师指点迷津,经典重装上市,揭开Windows内部的神秘面纱!

本书是讲解Windows操作系统内部机制的一本专著。本书从Windows API开始,然后相当深入地介绍了一些Windows的设计考虑及其运行机制,为读者掌握Windows编程技巧提供了一条有效的捷径。

本书帮助读者:理解Windows操作系统内部机制,精通32位或64位基于Windows的应用程序构件,掌握DLL的本质及其高级技术,使用结构化异常处理创建充分利用内存的应用程序,理解进和线程的实质,精通内存管理,用封装的可重用代码工具箱解决常见的线程同步问题,掌握Windows消息循环的原理。

内容简介

本书是讲解Windows操作系统内部机制的一本专著。作者从基本概念入手,全面系统地介绍了Windows底层实现机制、Windows应用程序的基本构件(包括进程、线程、内存管理、动态链接库、线程本地存储和Unicode)以及各类Windows API等,并列举了大量应用程序示例,精辟地分析了Windows编程的各个难点和要点,为掌握Windows编程技巧提供了一条有效的捷径。

本书适合Windows编程人员参考。

作者简介:

Jeffrey Richter,是一位在全球享有盛誉的技术作家,尤其在Windows/.NET领域有着杰出的贡献。他的第一本Windows著作《Windows 95:A Developer'S Guide》大获好评,从而声名远扬。之后,他又推出了经典著作《Windows高级编程指南》和dWindows核心编程》。如今这两本书早已成为Windows程序设计领域的经典之作,培育了几代软件开发设计人员。Jeffrey是WinteIIect公司的创始人之一,也是MSDN杂志.NET专栏的特邀编辑。他对Windows思想的领悟、对Windows细节的熟稔,是其他任何作家难以企及的。他是Windows技术作家中当之无愧的一面旗帜。

目录

译者序

前言

作译者简介

第一部分 程序员必读

第1章 错误处理

1.1 自定义错误处理的实现

1.2 错误显示例程

第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 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 枚举系统中运行的进程

第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 ExitThread函数

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 线程的身份标识

第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 SignalObjectAndWait

第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 无效断点分配分区(适于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 VMQery函数

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 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 静态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 Funcenstein1

23.2 Funcenstein2

23.3 Funcenstein3

23.4 Funcfurter1

23.5 小测验:FuncaDoodleDoo

23.6 Funcenstein4

23.7 Funcarama1

23.8 Funcarama2

23.9 Funcarama3

23.10 Funcarama4:最终的边界

23.11 有关finally块的说明

23.12 Funcfurter2

23.13 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 GetExceptionCode

24.5.1 与内存相关的异常

24.5.2 与异常相关的异常

24.5.3 与调试相关的异常

24.5.4 与整数相关的异常

24.5.5 与浮点数相关的异常

24.6 GetExceptionInformation

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宏

书摘插图

第一部分 程序员必读

第1章错误处理

在开始学习Windows提供的一些必要特性之前,有必要了解各种Windows函数是如何进行错误处理的。

当调用一个Windows函数时,系统首先验证传递给该函数的参数是否有效,然后开始执行该函数的任务。如果函数接收到一个无效的参数,或者由于其他原因导致该函数不能执行,则通过某种返回值来指示函数执行失败。表1-1给出了大多数Windows函数用到的返回值的数据类型。

当一个Windows函数返回一个错误代码时,了解该函数为何执行失败往往非常有用。微软公司已经编译了一系列可能的错误代码,而且为每个错误代码赋予了一个32位的数字。

在系统内部,当一个Windows函数检测到一个错误时,它常常使用一种称为线程本地存储(thread-local storage)的机制来将合适的错误代码号和被调用的线程联系起来(线程一本地存储机制在第21章中讨论)。这样就允许线程之间互相独立地运行,而不会影响彼此的错误代码。当函数返回其值后,该返回值会指示发生了一个错误。可调用GetLastError函数查看错误详情。

……

Windows 核心编程:原书第4版

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
更多商品
大力水手:父子情(13VCD)
发现一流企业的本真
解放企业人的心灵
你为什么感到社会不公平
虹猫仗剑走天涯(附赠虹猫蓝兔英雄贴)(上部1至36集12VCD)
ActionScript 3.0编程精髓
哈佛图书馆墙上的训言
无人之境
二三线市场实战手册(第三版)
不能说的的秘密(DVD)随碟赠送珍藏海报一张
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有