书籍详情

Windows高级编程指南(第三版)

Windows高级编程指南(第三版)

作者:(美)Jeffrey Richter;王书洪译

出版社:Microsoft Press

出版时间:1999-06-01

ISBN:9787302033288

定价:¥99.00

购买这本书可以去
内容简介
  内容简介本书以详尽的资料和大量的范例深入讨论了有关32位Windows编程的高级问题,包括进程和线程的管理、Win32的内存管理、消息处理、动态链接库、文件系统和设备输入输出、结构化异常处理、Unicode等,并重点讨论了Windows95和WindowsNT在实现上的不同之处,其中包含了大量的编程技巧。本书可供高等院校计算机专业的师生和广大的计算机编程人员使用。
作者简介
  JeffreyRichterJeffreyRichter是一位在全球享有盛誉的技术作家,尤其在Windows/.NET领域有着杰出的贡献。他的第一本Windows著作Windows3:ADeveloper'sGuide大获好评,从而声名远扬。之后,他又推出了经典著作《Windows高级编程指南》和《Windows核心编程》。如今这两本书早已成为Windows程序设计领域的颠峰之作,培育了几代软件开发设计人员。他的每一本新作问世,我们都有理由相信这是一本巨著,我们想要的一切尽在其中。Jeffery是Wintellect公司的创始人之一,也是MSDN杂志.NET专栏的特邀编辑。现在他正领导开发该公司的.NET程序设计课程,向大众推广.NET技术。因为他自1999年开始就参与了微软.NET框架开发组的咨询工作,与这些一线人员一起经历了.NET的孕育与诞生,所以他对.NET思想的领悟、对.NET的细节熟稔,是其他任何作家难以企及的。他是.NET著作领域中当之无愧的一面旗帜。>>更多作品
目录
第0章  绪论
0.1  关于应用程序范例
0.1.1  用C语言编写程序
0.1.2  Message Cracker Macros(消息拆析宏)
0.1.3  有关16位Windows编程的知识
0.1.4  在Windows 95下运行应用程序范例
0.1.5  不相关代码
0.1.6  范例应用程序的独立性
0.1.7  STRICT编译
0.1.8  错误检查
0.1.9  没有错误
0.1.10  测试平台和环境
0.1.11  Unicode
0.2  安装范例程序
0.2.1  配套的CD-ROM盘
第1章  WIN 32 API和支持它的平台
1.1  梦想一下:Win 32 API
1.2  Win 32s
1.3  Windows NT
1.4  Windows 95
1.5  Windows 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.2  CreateProcess函数
3.2.1  lpszApplicationName和lpszCommandline
3.2.2  lpsaProcess,lpsaThread和fInheritHandles
3.2.3  fdwCreate
3.2.4  lpvEnvironment
3.2.5  lpszCurDir
3.2.6  lpsiStartInfo
3.2.7  lppiProcInfo
3.3  终止进程
3.3.1  ExitProcess函数
3.3.2  Terminate 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.4  CreateThread函数
4.4.1  lpsa
4.4.2  cbstack
4.4.3  lpStartAddr和lpvThreadParm
4.4.4  fdwCreate
4.4.5  lpIDThread
4.5  终止线程
4.5.1  Exit Thread函数
4.5.2  TerminateThread函数
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.1  Windows 95如何划分进程的地址空间
5.1.2  Windows NT如何划分进程的地址空间
5.2  地址空间中的区域
5.3  在区域内提交物理存储
5.4  物理存储
5.4.1  不包含在页面文件中的物理存储
5.5  保护属性
5.5.1  写拷贝访问
5.5.2  特殊的访问保护属性标志
5.6  小结
5.6.1  区域的内部
5.7  Windows 95的地址空间的不同
第6章  虚拟内存
6.1  系统信息
6.1.1  系统信息范例应用程序
6.2  虚拟内存状态
6.2.1  虚拟内存状态范例应用程序
6.3  确定地址空间的状态
6.3.1  VMQuery函数
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.1  Windows 95下的线程的栈
7.9.2  C运行时库的栈检查函数 
第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.2  16位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.6  Bucket of Balls范例应用程序
10.3.7  SWMRG复合同步对象
10.3.8  Bucket范例源代码
10.3.9  Document Statistics范例应用程序
10.3.10  可等的计时器
10.4  线程挂起
10.4.1  Sleep
10.4.2  异步文件I/O
10.4.3  WaitForLnputIdle
10.4.4  MsgWaitForMultipleObjects
10.4.5  WaitForDebugEvent
10.4.6  SignalObjectAndWait
10.4.7  Interlocked函数族
第11章  窗口消息和异步输入
11.1  多任务
11.1.1  抢先式调度
11.2  线程队列和消息处理
11.2.1  Win 32消息队列结构
11.2.2  向线程的消息队列投递消息
11.2.3  发送消息给窗口
11.2.4  唤醒线程
11.3  用消息发送数据
11.3.1  CopyData范例应用程序
11.4  非序列化输入
11.4.1  输入如何被非序列化
11.5  局部输入状态
11.5.1  键盘输入和焦点
11.5.2  鼠标光标管理
11.5.3  局部输入状态实验范例应用程序
第12章  动态链接库
12.1  创建动态链接
12.1.1  映射DLL到进程的地址空间
12.2  DLL的进入/退出函数
12.2.1  DLL_PROCESS_ATTACH
12.2.2  DLL_PROCESS_DATACH
12.2.3  DLL_THREAD_ATTACH
12.2.4  DLL_THREAD_DETACH
12.2.5  系统如何序列化对DllMain的调用
12.2.6  DllMain和C运行时库
12.3  从DLL中输出函数和变量
12.4  从DLL中引入函数和变量
12.4.1  DLL的头文件
12.5  创建DLL供非Visual C++工具使用
12.6  在EXE或DLL映射之间共享数据
12.6.1  EXE或DLL中的节
12.6.2  ModUse范例应用程序
12.6.3  MultInst范例应用程序
第13章  线程局部存储
13.1  动态线程局部存储
13.1.1  使用动态线程局部存储
13.1.2  动态线程局部存储范例应用程序
13.2  静态线程局部存储
13.2.1  静态线程局部存储范例应用程序
第14章  文件系统
14.1  Win 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.1  CreateFile
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.8  I/O完成端口
15.8.1  模拟完成I/O请求
15.8.2  I/O完成端口范例应用程序
15.9  判断I/O请求是否完成
15.10  取消未完成的I/O请求
第16章  结构化异常处理
16.1  终止处理程序
16.1.1  理解终止处理程序
16.1.2  关于finally块的一些注解
16.1.3  SEH终止范例应用程序
16.2  异常过滤程序和异常处理程序
16.2.1  理解异常过滤程序和异常处理程序
16.2.2  EXCEPTION_EXECUTE_HANDLER
16.2.3  EXCEPTION_CONTINUE_EXECUTION
16.2.4  EXCEPTION_CONTINUE_SEARCH
16.2.5  全局展开
16.2.6  停止全避展开
16.2.7  关于异常过滤程序的进一步讨论
16.2.8  GetExceptionInformation
16.2.9  SEH异常范例应用程序
16.2.10  SEH Sum范例应用程序
16.3  软件异常
16.3.1  SEH软件异常范例应用程序
16.3.2  未处理的异常
16.3.3  没有附属调试器的未和的异常
16.3.4  不显示异常消息框
16.3.5  自己调用UnhandledExceptionFilter
16.3.6  Windows NT的未处理的内核模式异常
第17章  Unicode
17.1  字符集
17.1.1  单字节和双字节字符集
17.1.2  Unicode:宽字节字符集
17.2  为什么要使用Unicode
17.3  如何编写Unicode源代码
17.3.1  Windows NT和Unicode
17.3.2  Windows 95和Unicode
17.3.3  C运行时库对Unicode的支持
17.3.4  Win 32定义的Unicode数据类型
17.3.5  Win 32中的Unicode和ANSI宏数
17.4  使你的程序能识别ANSI和Unicode
17.4.1  Win 32中的字符串函数
17.4.2  资源
17.4.3  文本
17.4.4  在Unicode和ANSI之间转换字符串
17.4.5  Windows NT的窗口类和过程
第18章  打开进程边界
18.1  为什么要打开进程边界:一个例子
18.2  使用注册表来注入DLL
18.3  使用Windows钩来注入DLL
18.3.1  Desktop Item Position Savev工具
18.4  使用远程线程注入DLL
18.4.1  如何装入一个DLL
18.5  影响其他进程的Win   32函数
18.5.1  CreateRemoteThread
18.5.2  GetThreadContext和SetThreadContext
18.5.3  VirtualQueryEx和VirtualProtectEx
18.5.4  VirtualAllocEx和VirtualFreeEx
18.5.5  ReadProcessMemory和WriteProcessMemory
18.6  创建一个函数向任意进程的地址空间注入DLL
18.6.1  版本0:为什么显然的方法不能工作
18.6.2  版本1:手编的机器语言
18.6.3  版本2:AllocProcessMemory和CreateRemore Thread
18.6.4  ProcMem工具函数
18.6.5  InjectLib函数
18.7  测试InjectLib函数
18.7.1  注入库范例应用程序
18.7.2  映象遍历动态链接库
18.8  小结
附录 A  FIBERS
A.1  例程:计算器应用程序
附录 B MESSAGE CRACKERC
B.1  Message Crackers
B.2  Child Control宏
B.3  API宏
附录 C 编程环境
C.1  CMNHDR.H头文件
C.1.1  4级警告
C.1.1  Windows版本
C.1.2  STRICT宏
C.1.3  CPU Prtability宏
C.1.4  标准编码(Unicode) 
C.1.5  chDIMOF宏
C.1.6  chBEGINTHEADEX宏
C.1.7  chASSERT 宏和chVERIFY宏
C.1.8  chHANDLE_DLGMSG宏
C.1.9  chassert宏和chVERIFY宏
C.1.10  chMB宏
C.1.11  chINITSTRUCT宏
C.1.12  chSETDLGICONS宏
C.1.13  chWARNIFUNICODEUNDERWIN 95宏
C.1.14  Pragma Message Helper宏
C.1.15  链接指令
C.2  在源文件中不能对项目进行设置
猜您喜欢

读书导航