Windows深入剖析 内核篇
作者:杨亮等编著
出版时间: 1997年版
内容简介
本书向读者提示了Windows及其应用程序运行过程,深入剖析了构成Windows内核实体的几个最主要的方面,其中包括:内存的分配和管理,模块的装载和卸载,任务的启动和终止,动态链接机制,任务调度机制,消息驱动机制,同时对Windows内核的启动和终止过程也进行了比较全面的剖析。本书与姊妹篇《Windows深入剖析——初始化篇》构成了一个整体,帮助读者完整透彻地了解Windows内部奥秘。本书面向计算机系统开发人员,也可供高等院校相关专业的师生阅读参考。
目录
第1章 基础知识
1.1 保护模式概述
1.1.1 保护模式的渊源
1.1.2 什么是保护模式
1.2 分段机制和段描述符表
1.3 段页式寻址机制
1.4 保护模式下的异常
1.5 保护模式下的寄存器和新增指令集
1.6 介绍Soft-ICE for Windows
第2章 Windows内核数据结构
2.1 Windows可执行文件首部的格式
2.1.1 MS-DOS文件头
2.1.2 MS-Windows文件头
2.1.3 Windows代码段中的重定位信息
2.1.4 Windows可执行文件实例剖析
2.2 Windows的模块表
2.2.1 模块表
2.2.2 Windows模块表实例剖析——KERNEL的模块表
2.3 Windows的默认数据段
2.4 Windows的任务数据库(TDB)
2.4.1 任务数据库TDB
2.4.2 任务数据库实例剖析——progman的TDB
2.4.3 PSP与PDB
2.4.4 进程数据块实例剖析
2.5 WND结构及INTWNDCLASS结构
2.6 Windows中的重表——THHOOK
第3章 Windows内核引导过程
3.1 Windows启动过程的回顾
3.2 KERNEL初始化过程概述
3.3 KRNL386.EXE的STUB程序
3.4 KRNL386的STUB程序清单
3.5 BOOTSTRAP的执行过程
3.5.1 BOOTSTRAP I的执行过程
3.5.2 BOOTSTRAP II的执行过程
3.5.3 初始化全局堆——globalInit()
3.5.4 创建模块表
3.6 BOOTSTRAP源程序清单精选
第4章 Windows的启动和终止
4.1 Windows内核初始化的流程
4.1.1 Windows内核初始化的实现流程
4.1.2 程序段0117:D182-D19F:
4.1.3 程序段0117:D1AB-D212:
4.1.4 Windows怎样满足同时打开很多文件的需要?
4.1.5 0117:D2CB-D2E6程序段
4.1.6 0117:d764-d769程序段
4.2 Windows内核初始化程序清单
4.3 退出Windows内核的过程
4.3.1 ExitWindows()例程
4.3.2 ExitKernel()例程
第5章 Windows内存管理机制
5.1 Windows内存管理概述
5.2 内存管理中的数据结构
5.2.1 BurgerMaster段
5.2.2 全局堆信息结构与全局场
5.2.3 局部堆与局部场
5.3 全局堆中内存块的组织形式
5.3.1 空闲链表
5.3.2 LRU链表
5.4 全局内存分配标记的含义
5.5 Windows的内存管理函数
5.5.1 全局堆内存管理函数
5.5.2 局部堆内存管理函数
5.6 GlobalAlloc()的剖析
5.6.1 CheckAllocValidty()
5.6.2 SubCheckAllocValidty()
5.6.3 SubGAlloc()
5.6.4 AllocMemory()
5.6.5 FindFreeLow()
5.6.6 AllocFreeLow()
5.6.7 MoveBlockNearBy()
5.6.8 CheckBlockNearBy()
5.6.9 MoveFreeLow()
5.6.10 StorageBackward()
5.6.11 MarkSwapPage()
5.6.12 CheckFreeBorder()
5.6.13 ModiGlobalArena()
5.6.14 InsertIdleLink()
5.6.15 SubInsert()
5.6.16 BreakIdleLink()
5.6.17 UnifyFreeBlock()
5.6.18 GrowHeap()
5.6.19 GetDPMIInfo()
5.6.20 FreeDPMIBlock()
5.6.21 UnlinkWin386Block()
第6章 Windows模块装载机制
6.1 模块的基本概念
6.2 实例和任务的概念
6.3 模块装载函数——LoadModule()
6.4 模块装载函数的重要辅助例程
6.4.1 检测指定模块是否已经装入内存的函数——CheckLoadingModule()
6.4.2 为已装入模块创建新实例的函数——CreateNewInstance()
6.4.3 文件打开函数——OpenModuleFile()
6.4.4 模块表创建函数——CreateMDB()
6.4.5 模块标记检测函数——CHeckModuleFlag()
6.4.6 TDB和DLL引用链表段的创建函数——CreateTask()
6.4.7 任务数据库的创建函数——CreateTDB()
6.4.8 任务模块PDB的初始化函数——InitPDB_1()
6.4.9 模块内存分配函数——DoModuleAlloc()
6.4.10 段内存分配函数——AllocModuleSet()
6.4.11 引用DLL的装入函数——LoadImportDll()
6.4.12 段装载函数——LoadModuleSeg()
6.4.13 运行已装载模块的函数——RunNewMOdule()
6.4.14 模块初始化函数——InitModule()
6.4.15 库模块的初始化函数——InitDllModule()
6.4.16 应用程序模块的初始化函数——InitAppModule()
6.4.17 任务启动函数——StartNewTask()
6.5 段的装载
6.5.1 段装载函数——LoadSegment()
6.5.2 内存分配函数——FarMyAlloc()
6.5.3 段数据复制函数——CopySegToDesc()
6.5.4 重复段创建函数——CreateIteratedSeg()
6.5.5 前序代码修改函数——PatchCodeHandle()
6.6 被装载模块的重定位
6.6.1 System.drv中段选择符的重定位
6.6.2 Keyboard.drv中函数指针(段:偏移)的重定位
6.6.3 System.drv中函数指针(段:偏移)的重定位
6.6.4 System.drv中常量函数的重定位
6.7 缓存文件名柄对照表
6.8 模块的卸载过程
6.8.1 模块删除函数——DeleteModule()
6.9 自装载Windows的应用程序
6.9.1 为什么要引入自装载问题
6.9.2 如何创建一个自装载程序
6.9.3 装载函数
6.9.4 段重载函数——LoadAppSeg()
6.9.5 硬件复位函数——EXITPROC()
6.9.6 内存分配函数——MyAlloc()
6.9.7 所有者设置函数——Set()wner()
6.9.8 入口点获取函数——EntryAddrProc()
第7章 Windows任务的启动和关闭
7.1 Windows任务的启动代码
7.2 Windows中任务的启动
7.2.1 任务初始化函数I——InitTask()
7.2.2 任务启动函数II——WaitEvent()
7.2.3 任务启动函数III——InitApp()
7.2.4 TSR装载程序——LoadTSRApp()
7.3 任务的入口函数——WinMain()
7.4 Windows中任务的终止
7.4.1 任务终止函数——ExitTask()
第8章 Windows动态链接机制
8.1 动态链接机制
8.1.1 动态链接的概述
8.1.2 动态链接库与应用程序的比较
8.1.3 动态链接与静态链接的比较
8.1.4 动态链接库的实例剖析
8.2 动态链接库的启动代码
8.3 动态链接库函数
8.3.1 库装载和卸载函数
8.3.2 库的初始化函数
8.3.3 库中引出函数入口点的获取函数
8.3.4 库清理函数WEP()
8.4 动态链接库引用次数的设置
8.4.1 IncExeUsage()
8.4.2 DecExeUsage()
8.5 Windows的前置代码(Prologs)和后续代码(Epilogs)
8.5.1 概述
8.5.2 应用程序的前置代码和后续代码
8.5.3 应用程序的灵巧回调(Smart CallBack)
8.5.4 DLL的前置代码和后续代码
8.5.5 实模式下的前置代码
8.5.6 保护模式下的前置代码
8.5.7 过程实例块的创建和解放函数
第9章 Windows任务调度机制
9.1 多任务机制
9.2 抢先式调度策略
9.3 非抢先式调度策略
9.3.1 事件
9.3.2 优先级
9.3.3 控制权的释放
9.4 源程序说明
9.4.1 WaitEvent()
9.4.2 Directedyield()
9.4.3 Yield()
9.4.4 UserYIeld()
9.4.5 OldYIeld()
9.4.6 PostEvent()
9.4.7 SetPriority()
9.4.8 Reschedule()
第10章 Windows消息驱动机制
10.1 Windows的消息结构
10.2 Windows的任务队列
10.3 Windows的系统队列
10.4 消息队列的创建
10.4.1 系统队列的创建——CreateSystemQueue
10.4.2 任务队列的创建——CreateTaskQueue()
10.4.3 消息队列的创建——CreateQueue()
10.5 Windows的消息类型
10.5.1 键盘消息——Qs_Key
10.5.2 鼠标消息——Qs_Mouse
10.5.3 时钟消息——Qs_Timer
10.5.4 屏幕重绘消息——Qs_Paint
10.5.5 传递消息——Qs_PostMsg
10.5.6 发送消息——Qs_SendMsg
10.6 Windows的消息值
10.7 Windows的消息函数
10.7.1 消息标记获取函数
10.7.2 消息发送函数1
10.7.3 消息应答函数
10.7.4 消息获取函数
10.7.5 消息传递函数
10.7.6 消息发送函数2
附录 DPMI功能调用
参考文献