WINDOWS高级编程指南(第三版)
分類: 图书,计算机/网络,操作系统/系统开发,WINDOWS,
作者: [美]JEFFREY RICHTER 译:王书洪 刘光明
出 版 社: 清华大学出版社
出版时间: 1999-6-1字数: 1120版次: 1页数: 805印刷时间: 19990601开本:印次:纸张:I S B N : 73020332285包装: 平装内容简介
本书以详尽资料和大量的范例深入讨论了有关32位Windows编程的高级问题,包括进程和线程的管理、Win 32的内存管理、消息处理、动态链接库、文件系统和设备输入输出、结构化异常处理、Unicode等,并重点讨论了Windows 95和Windows NT在实现上的不同之处,其中包含了大量的编程技巧。本书可供高等院校计算机专业的师生和广大的计算机编程人员使用。
目录
第0章绪论
0.1关于应用程序范例
0.1.1用C语言编写程序
0.1.2Message Cracker Macros(消息拆析宏)
0.1.3有关16位Windows编程的知识
0.1.4在Windows 95下运行应用程序范例
0.1.5不相关代码
0.1.6范例应用程序的独立性
0.1.7STRICT编译
0.1.8错误检查
0.1.9没有错误
0.1.10测试平台和环境
0.1.11Unicode
0.2安装范例程序
0.2.1配套的CD-ROM盘
第1章WIN 32 API和支持它的平台
1.1梦想一下:Win 32 API
1.2Win 32s
1.3Windows NT
1.4Windows 95
1.5Windows CE
1.6现实:Win 32 API
第2章内核对象
2.1什么是内核对象
2.1.1使用计数
2.1.2安全
2.2进程的内核对象句柄表
2.2.1创建内核对象
2.2.2关闭内核对象
2.3在进程间共享内核对象
2.3.1对象句柄继承
2.3.2改变句柄标志
2.3.3命名对象
2.3.4复制对象句柄
第3章进程
3.1编写第一个Win 32应用程序
3.1.1进程的实例句柄
3.1.2进程的前一个实例的句柄
3.1.3进程的命令行
3.1.4进程的环境变量
3.1.5进程的错误模式
3.1.6进程的当前驱动器和目录
3.1.7系统版本
3.2CreateProcess函数
3.2.1lpszApplicationName和lpszCommandline
3.2.2lpsaProcess,lpsaThread和fInheritHandles
3.2.3fdwCreate
3.2.4lpvEnvironment
3.2.5lpszCurDir
3.2.6lpsiStartInfo
3.2.7lppiProcInfo
3.3终止进程
3.3.1ExitProcess函数
3.3.2Terminate Process函数
3.3.3进程中的所有线程结束了
3.3.4进程终结时发生的事情
3.4 子进程
3.4.1运行分离的子进程
第4章线程
4.1何时创建线程
4.2何时不用创建线程
4.3编写第一个线程函数
4.3.1线程的栈
4.3.2线程的CONTEXT结构
4.3.3线程的执行时间
4.4CreateThread函数
4.4.1lpsa
4.4.2cbstack
4.4.3lpStartAddr和lpvThreadParm
4.4.4fdwCreate
4.4.5lpIDThread
4.5终止线程
4.5.1Exit Thread函数
4.5.2TerminateThread函数
4.5.3进程终结
4.5.4线程终结时的情况
4.6识别自己的身份
4.7系统如何调度线程
4.7.1使用Win 32 API怎样赋优先级
4.7.2改变进程的优先级类
4.7.3设定线程的相对优先级
4.7.4挂起和恢复线程
4.8系统内部情况
4.9进程、线程和C运行时库
4.9.1应避免使用的C运行时函数
第5章Win 32内存结构
5.1虚地址空间
5.1.1Windows 95如何划分进程的地址空间
5.1.2Windows NT如何划分进程的地址空间
5.2地址空间中的区域
5.3在区域内提交物理存储
5.4物理存储
5.4.1不包含在页面文件中的物理存储
5.5保护属性
5.5.1写拷贝访问
5.5.2特殊的访问保护属性标志
5.6小结
5.6.1区域的内部
5.7Windows 95的地址空间的不同
第6章虚拟内存
6.1系统信息
6.1.1系统信息范例应用程序
6.2虚拟内存状态
6.2.1虚拟内存状态范例应用程序
6.3确定地址空间的状态
6.3.1VMQuery函数
6.3.2虚拟内存映射范例应用程序
第7章在应用程序中使用虚拟内存
7.1在地址空间中保留区域
7.2在保留区域中提交存储
7.3同时保留区域和提交物理存储
7.4何时提交物理存储
7.5释放物理存储和释放区域
7.5.1何时释放物理存储
7.5.2虚拟内存分配范例应用程序
7.6修改保护属性
7.7在RAM中锁定物理存储
7.8重设物理存储的内容
7.9线程的栈
7.9.1Windows 95下的线程的栈
7.9.2C运行时库的栈检查函数
第8章内存映射文件
8.1内存映射EXE和DLL
8.1.1不被EXE或DLL的多个实例共享的静态数据
8.2内存映射数据文件
8.2.1方法1:一个文件,一个缓冲区
8.2.2方法2:两个文件,一个缓冲区
8.2.3方法3:一个文件,两个缓冲区
8.2.4方法4:一个文件,零个缓冲区
8.3使用内存映射文件
8.3.1第1步:创建或打开文件内核对象
8.3.2第2步:创建文件映射内核对象
8.3.3第3步:将文件数据映射入进程地址空间
8.3.4第4步:从进程地址空间中解除文件数据映射
8.3.5第5步和第6步:关闭文件映射对象和文件对象
8.3.6用内存映射文件处理大文件
8.4内存映射文件和一致性
8.4.1文件倒置范例应用程序
8.4.2指定内存映射文件的基本地址
8.5内存映射文件和Win 32实现
8.5.1使用内存映射文件在进程间共享数据
8.5.2由页面文件支持的内存映射文件
8.5.3内存映射文件共享范例应用程序
8.6稀疏提交的内存映射文件
第9章堆
9.1什么是Win 32堆
9.1.1进程的缺省堆
9.1.2创建自己的Win 32堆
9.1.3创建Win 32堆
9.1.4释放Win 32堆
9.1.5在C++时使用堆
9.1.6其他一些堆函数
9.216位Windows堆函数
第10章线程同步
10.1线程同步概述
10.2最坏的事情
10.2.1创建监临界区
10.2.2使用临界区
10.2.3临界区范例应用程序
10.3用内核对象同步线程
10.3.1互斥量
10.3.2互斥量范例应用程序
10.3.3信号量
10.3.4超市范例应用程序
10.3.5事件
10.3.6Bucket of Balls范例应用程序
10.3.7SWMRG复合同步对象
10.3.8Bucket范例源代码
10.3.9Document Statistics范例应用程序
10.3.10可等的计时器
10.4线程挂起
10.4.1Sleep
10.4.2异步文件I/O
10.4.3WaitForLnputIdle
10.4.4MsgWaitForMultipleObjects
10.4.5WaitForDebugEvent
10.4.6SignalObjectAndWait
10.4.7Interlocked函数族
第11章窗口消息和异步输入
11.1多任务
11.1.1抢先式调度
11.2线程队列和消息处理
11.2.1Win 32消息队列结构
11.2.2向线程的消息队列投递消息
11.2.3发送消息给窗口
11.2.4唤醒线程
11.3用消息发送数据
11.3.1CopyData范例应用程序
11.4非序列化输入
11.4.1输入如何被非序列化
11.5局部输入状态
11.5.1键盘输入和焦点
11.5.2鼠标光标管理
11.5.3局部输入状态实验范例应用程序
第12章动态链接库
12.1创建动态链接
12.1.1映射DLL到进程的地址空间
12.2DLL的进入/退出函数
12.2.1DLL_PROCESS_ATTACH
12.2.2DLL_PROCESS_DATACH
12.2.3DLL_THREAD_ATTACH
12.2.4DLL_THREAD_DETACH
12.2.5系统如何序列化对DllMain的调用
12.2.6DllMain和C运行时库
12.3从DLL中输出函数和变量
12.4从DLL中引入函数和变量
12.4.1DLL的头文件
12.5创建DLL供非Visual C++工具使用
12.6在EXE或DLL映射之间共享数据
12.6.1EXE或DLL中的节
12.6.2ModUse范例应用程序
12.6.3MultInst范例应用程序
第13章线程局部存储
13.1动态线程局部存储
13.1.1使用动态线程局部存储
13.1.2动态线程局部存储范例应用程序
13.2静态线程局部存储
13.2.1静态线程局部存储范例应用程序
第14章文件系统
14.1Win 32的文件名约定
14.2系统和卷操作
14.2.1得到卷的特定信息
14.2.2磁盘信息查看范例应用程序
14.3目录操作
14.3.1得到当前目录
14.3.2改变当前目录
14.3.3得到系统目录
14.3.4得到Windows目录
14.3.5创建和删除目录
14.4拷贝、删除、移动和重命名文件
14.4.1拷贝文件
14.4.2删除文件
14.4.3移动文件
14.4.4重命名文件
14.5查找文件
14.5.1目录漫游范例应用程序
14.6文件系统变化通知
14.6.1文件变化范例应用程序
14.7操纵文件属性
14.7.1可执行文件类型
14.7.2文件属性
14.7.3文件大小
14.7.4文件时间戳
14.8创建临时文件
第15章设备I/O
15.1打开和关闭设备
15.1.1CreateFile
15.2使用文件设备
15.2.1定位文件指针
15.2.2设置文件尾
15.2.3加锁和解锁文件的区域
15.3进行同步I/O
15.3.1向设备强制刷新数据
15.4进行异步I/O
15.5使设备内核对象有信号
15.6使事件内核对象有信号
15.7告警I/O
15.7.1告警I/O范例应用程序
15.8I/O完成端口
15.8.1模拟完成I/O请求
15.8.2I/O完成端口范例应用程序
15.9判断I/O请求是否完成
15.10取消未完成的I/O请求
第16章结构化异常处理
16.1终止处理程序
16.1.1理解终止处理程序
16.1.2关于finally块的一些注解
16.1.3SEH终止范例应用程序
16.2异常过滤程序和异常处理程序
16.2.1理解异常过滤程序和异常处理程序
16.2.2EXCEPTION_EXECUTE_HANDLER
16.2.3EXCEPTION_CONTINUE_EXECUTION
16.2.4EXCEPTION_CONTINUE_SEARCH
16.2.5全局展开
16.2.6停止全避展开
16.2.7关于异常过滤程序的进一步讨论
16.2.8GetExceptionInformation
16.2.9SEH异常范例应用程序
16.2.10SEH Sum范例应用程序
16.3软件异常
16.3.1SEH软件异常范例应用程序
16.3.2未处理的异常
16.3.3没有附属调试器的未和的异常
16.3.4不显示异常消息框
16.3.5自己调用UnhandledExceptionFilter
16.3.6Windows NT的未处理的内核模式异常
第17章Unicode
17.1字符集
17.1.1单字节和双字节字符集
17.1.2Unicode:宽字节字符集
17.2为什么要使用Unicode
17.3如何编写Unicode源代码
17.3.1Windows NT和Unicode
17.3.2Windows 95和Unicode
17.3.3C运行时库对Unicode的支持
17.3.4Win 32定义的Unicode数据类型
17.3.5Win 32中的Unicode和ANSI宏数
17.4使你的程序能识别ANSI和Unicode
17.4.1Win 32中的字符串函数
17.4.2资源
17.4.3文本
17.4.4在Unicode和ANSI之间转换字符串
17.4.5Windows NT的窗口类和过程
第18章打开进程边界
18.1为什么要打开进程边界:一个例子
18.2使用注册表来注入DLL
18.3使用Windows钩来注入DLL
18.3.1Desktop Item Position Savev工具
18.4使用远程线程注入DLL
18.4.1如何装入一个DLL
18.5影响其他进程的Win 32函数
18.5.1CreateRemoteThread
18.5.2GetThreadContext和SetThreadContext
18.5.3VirtualQueryEx和VirtualProtectEx
18.5.4VirtualAllocEx和VirtualFreeEx
18.5.5ReadProcessMemory和WriteProcessMemory
18.6创建一个函数向任意进程的地址空间注入DLL
18.6.1版本0:为什么显然的方法不能工作
18.6.2版本1:手编的机器语言
18.6.3版本2:AllocProcessMemory和CreateRemore Thread
18.6.4ProcMem工具函数
18.6.5InjectLib函数
18.7测试InjectLib函数
18.7.1注入库范例应用程序
18.7.2映象遍历动态链接库
18.8小结
附录 AFIBERS
A.1例程:计算器应用程序
附录 B MESSAGE CRACKERC
B.1Message Crackers
B.2Child Control宏
B.3API宏
附录 C 编程环境
C.1CMNHDR.H头文件
C.1.14级警告
C.1.1Windows版本
C.1.2STRICT宏
C.1.3CPU Prtability宏
C.1.4标准编码(Unicode)
C.1.5chDIMOF宏
C.1.6chBEGINTHEADEX宏
C.1.7chASSERT 宏和chVERIFY宏
C.1.8chHANDLE_DLGMSG宏
C.1.9chassert宏和chVERIFY宏
C.1.10chMB宏
C.1.11chINITSTRUCT宏
C.1.12chSETDLGICONS宏
C.1.13chWARNIFUNICODEUNDERWIN 95宏
C.1.14Pragma Message Helper宏
C.1.15链接指令
C.2在源文件中不能对项目进行设置