分享
 
 
 

《windows核心编程》

王朝资源·作者佚名  2009-05-12
 说明  因可能的版权问题本站不提供该资源的存贮、播放、下载或推送,本文仅为内容简介。

简介:

本书是讲解Windows 操作系统内部机制的专著,作者从基本概念入手,全面系统地介绍了Windows的各种基本构件,如进程、线程、DLL和内存管理等,并列举了大量应用程序,精辟地分析了构件的使用方法,为掌握Windows 编程技巧提供了一条有效的捷径。对于不同水平的Windows 编程人员来说,本书都具有极好的参考价值。

目 录

第一部分 程序员必读

第1章 对程序错误的处理1

1.1 定义自己的错误代码4

1.2 ErrorShow示例应用程序5

第2章 Unicode11

2.1 字符集11

2.1.1 单字节与双字节字符集11

2.1.2 Unicode:宽字节字符集12

2.2 为什么使用Unicode13

2.3 Windows 2000与Unicode13

2.4 Windows 98与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.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和

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章 线程的基础知识121

6.1 何时创建线程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 终止线程的运行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 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.2 互斥对象与关键代码段的比较214

9.6.3 Queue示例应用程序214

9.7 线程同步对象速查表223

9.8 其他的线程同步函数224

9.8.1 异步设备I/O224

9.8.2 WaitForInputIdle224

9.8.3 MsgWaitForMultipleObjects (Ex)225

9.8.4 WaitForDebugEvent225

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章 Windows的内存结构299

13.1 进程的虚拟地址空间299

13.2 虚拟地址空间如何分区300

13.2.1 NuLL 指针分配的分区—适用于

Windows 2000和Windows 98300

13.2.2 MS-DOS/16位Windows 应用程序兼容

分区—仅适用于Windows 98301

13.2.3 用户方式分区—适用于Windows 2000

和Windows 98301

13.2.4 64 KB禁止进入的分区—仅适用

于Windows 2000302

13.2.5 共享的MMF分区—仅适用于

Windows 98303

13.2.6 内核方式分区—适用于Windows

2000和Windows 98303

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 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 可执行文件或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++工具

的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.4 函数转发器499

20.5 已知的DLL499

20.6 DLL转移500

20.7 改变模块的位置501

20.8 绑定模块506

第21章 线程本地存储器509

21.1 动态TLS509

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

23.1 通过例子理解结束处理程序566

23.2 Funcenstein1566

23.3 Funcenstein2566

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 Code 589

24.6 Get Exception Information592

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

Filter602

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有