《Windows95 Windows NT3.5高级编程技术》求取 ⇩

鸣谢1

目录1

前言3

0.1 我对大家的期望3

0.2 关于示例应用程序3

0.2.3 有关16位Windows编程的知识4

0.2.4 在Windows 95下运行示例应用程序4

0.2.2 Message Cracker Macros(消息拆析宏)4

0.2.1 用C语言写的程序4

0.2.5 不相关代码5

0.2.6 相互独立的应用程序5

0.2.7 STRICT一致性5

0.2.8 错误检查5

0.2.9 没有错误6

0.2.10 测试平台及环境6

0.2.11 Unicode7

0.3 安装示例程序7

0.3.1 Windows 957

0.3.2 Windows NT8

第1章 WIN32API及支持它的平台10

1.1 梦想:Win32API10

1.2 Win32s11

1.3 Windows NT11

1.4 Windows 9512

1.5 现实:Win32 API13

第2章 进程15

2.1 核心对象16

2.2 编写第一个Win32应用程序17

2.2.1 进程的实例句柄19

2.2.2 进程的先前实例句柄21

2.2.3 进程的命令行22

2.2.4 进程的环境变量23

2.2.5 进程的错误方式26

2.2.6 进程的当前驱动器和目录26

2.2.7 进程继承的核心对象27

2.2.8 系统版本29

2.3 CreateProcess函数30

2.3.1 lpszImageName和lpszCommandLine31

2.3.2 lpsaProcess,lpsaThread和fInheritHandles32

2.3.3 fdwCreate33

2.3.4 lpvEnvironment35

2.3.5 lpszCurDir35

2.3.6 lpsiStartInfo35

2.3.7 lppiProcInfo39

2.4 终止进程40

2.4.1 ExitPorcess函数40

2.4.3 进程的结束41

2.4.2 TerminateProcess函数41

2.5 子进程42

2.5.1 运行分离的子进程43

第3章 线程44

3.1 何时创建线程44

3.2 何时不用创建线程45

3.3 编写第一个线程函数47

3.3.1 线程的栈47

3.3.2 线程的CONTEXT结构48

3.3.3 线程的执行时间48

3.4.1 lpsa50

3.4 CreateThread函数50

3.4.2 cbStacr51

3.4.3 lpStartAddr和lpvThreadParm51

3.4.4 fdwCreate52

3.4.5 lpIDThead53

3.5 终止线程53

3.5.1 ExitThread函数53

3.5.2 TerminateThread函数53

3.5.3 线程终止时发生些什么54

3.6 识别自己的身份55

3.7 系统如何安排线程58

3.7.1 如何使用Win32 API分配优先级59

3.7.2 修改进程优先级类61

3.7.3 设定线程相对优先级62

3.7.4 挂起及恢复线程64

3.8 查看系统内部64

3.9 进程、线程和C运行时库69

3.9.1 要避免使用的C运行时函数72

第4章 Win32存储结构74

4.1 我所知的CPU74

4.2 虚拟地址空间76

4.2.1 Windows 95如何划分进程的地址空间77

4.2.2 Windows NT如何划分进程的地址空间78

4.3 地址空间中的区域80

4.4 在区域内提交物理存储81

4.5 物理存储82

4.5.1 不在页面文件中维护的物理存储83

4.6 保护属性84

4.6.1 写时拷贝(Copy-On-Write)访问85

4.6.2 特殊访问保护属性标志85

4.7 综述86

4.7.1 区域内部89

4.7.2 Windows 95地址空间的差别93

第5章 探索虚存100

5.1 系统信息100

5.1.1 系统信息示例应用程序101

5.2 虚存状态107

5.2.1 虚存状态示例应用程序108

5.3 确定地址空间的状态113

5.3.1 VMQuery函数114

5.3.2 虚存分配示例应用程序123

第6章 使用虚存132

6.1 在地址空间中保留区域132

6.2 在保留区内提交存储134

6.3 同时保留区域和提交存储135

6.4 何时提交物理存储135

6.5 回收物理存储和释放区域137

6.5.1 何时回收物理存储138

6.5.2 虚存分配示例应用程序138

6.6 改变保护属性149

6.7 在RAM中锁住物理存储150

6.8 线程的栈151

6.8.1 Windows 95下的线程栈154

6.8.2 C运行时刻的栈检查函数155

第7章 存储映射文件158

7.1 存储映射EXE和DLL158

7.1.1 静态数据不能被一个EXE或一个DLL文件的多个实例共享159

7.2 存储映射数据文件161

7.2.1 方法1:一个文件,一个缓冲区161

7.2.4 方法4:一个文件,零个缓冲区162

7.2.3 方法3:一个文件,两个缓冲区162

7.2.2 方法2:两个文件,一个缓冲区162

7.3 使用存储映射文件163

7.3.1 步骤1:创建或打开文件核心对象163

7.3.2 步骤2:创建文件映射核心对象164

7.3.3 步骤3:映射文件的数据到进程地址空间166

7.3.4 步骤4:从进程地址空间解除文件数据的映射169

7.3.5 步骤5和步骤6:关闭文件映射对象和文件对象170

7.3.6 使用存储映射文件处理大文件171

7.4 存储映射文件和一致性173

7.4.1 文件反转示例应用程序174

7.4.2 指定存储映射文件的基地址183

7.5 存储映射文件和Win32实现184

7.5.1 使用存储映射文件在进程间共享数据186

7.5.2 由页面文件备份的存储映射文件189

7.5.3 存储映射文件共享示例应用程序190

7.6 稀疏提交的存储映射文件197

第8章 堆199

8.1 什么是Win32堆?199

8.1.2 创建自己的Win32堆200

8.1.1 进程的缺省堆200

8.1.3 创建另外的Win32堆202

8.1.4 消除Win32堆205

8.1.5 在C++中使用堆205

8.1.6 16位的Windows堆函数209

第9章 线程同步213

9.1 同步概述213

9.1.1 最坏的事情之一213

9.2 临界区214

9.2.1 创建临界区216

9.2.2 使用临界区217

10.1.1 抢占式调度218

9.2.3 临界区示例应用程序223

9.3 用核心对象同步线程235

9.3.1 互斥量238

9.3.2 互斥量示例应用程序243

9.3.3 信号量252

9.3.4 超级市场示例应用程序253

9.3.5 事件277

9.3.6 Bucket of Balls示例应用程序278

9.3.7 SWMRG复合同步对象280

9.3.8 Bucket示例源代码285

9.3.9 文档统计示例应用程序304

9.4 线程挂起313

9.4.1 Sleep313

9.4.2 异步文件I/O313

9.4.3 WaitForInputIdle313

9.4.4 MsgWaitForMultipleObjects314

9.4.5 WaitForDebugEvent315

9.4.6 Interlocked函数族315

第10章 窗口消息和异步输入317

10.1 多任务317

10.2 线程队列和消息处理320

10.2.1 Win32消息队列结构320

10.2.2 发送消息给线程的消息队列320

10.2.3 发送消息给窗口322

10.2.4 唤醒线程325

10.3 用消息发送数据330

10.3.1 拷贝数据示例应用程序332

10.4 非序列化输入338

10.4.1 怎样使输入非序列化339

10.5 局部输入状态342

10.5.1 键盘输入和焦点343

10.5.2 鼠标光标管理346

10.5.3 局部输入状态实验示例应用程序347

第11章 动态链接库365

11.1 创建动态链接库365

11.1.1 映射DLL到进程地址空间367

11.2 DLL入口和出口函数371

11.2.1 DLL-PROCESS-ATTACH373

11.2.2 DLL-PROCESS-DETACH374

11.2.3 DLL-THREAD-ATTACH375

11.2.4 DLL-THREAD-DETACH377

11.2.5 系统如何把对DllMain的调用顺序化378

11.2.6 DllMain和C运行时库381

11.3 从DLL中输出函数和变量382

11.4 从DLL输出函数和变量384

11.4.1 DLL的头文件389

11.5.1 EXE或DLL的段390

11.5 在同一EXE或DLL的多个映射之间共享数据390

11.5.2 ModUse示例应用程序393

11.5.3 MultInst示例应用程序403

第12章 线程局部存储406

12.1 动态线程局部存储407

12.1.1 使用动态线程局部存储408

12.1.2 动态线程局部存储示例应用程序410

12.2 静态线程局部存储421

12.2.1 静态局部存储示例应用程序422

第13章 文件系统和文件输入输出431

13.1 Win32文件名约定432

13.2 系统和卷操作433

13.2.1 获得卷的特定信息436

13.2.2 磁盘信息查看示例应用程序441

13.3 目录操作450

13.3.1 获得当前目录450

13.3.2 改变当前目录451

13.3.4 获得窗口目录路径452

13.3.5 创建和删除目录452

13.3.3 获得系统目录452

13.4 拷贝、删除、移动及改名文件453

13.4.1 拷贝一个文件453

13.4.2 删除一个文件453

13.4.3 移动一个文件453

13.4.4 改名文件455

13.5 创建、打开和关闭文件456

13.6 同步读写文件460

13.6.1 定位文件指针462

13.6.4 锁定及解锁文件的某区域463

13.6.2 设置文件尾463

13.6.3 强制缓冲的数据写入磁盘463

13.7 异步读写文件466

13.7.1 同时执行多个异步文件I/O操作472

13.7.2 告警异步文件I/O473

13.7.3 告警I/O示例应用程序475

13.8 操作文件属性488

13.8.1 文件标志488

13.8.2 文件大小489

13.8.3 文件时间戳489

13.9 搜寻文件492

13.9.1 目录漫游示例应用程序495

13.10 文件系统变化通知504

13.10.1 文件变化示例应用程序507

第14章 结构化异常处理521

14.1 终止处理程序522

14.1.1 通过例子理解终止处理程序522

14.1.2 关于finally块的几点说明533

14.1.3 SEH终止示例应用程序535

14.2 异常过滤程序和异常处理程序545

14.2.1 通过例子理解异常过滤程序和异常处理程序546

14.2.2 EXCEPTION-EXECUTE-HANDLER547

14.2.3 EXCEPTION-CONTINUE-EXECUTION548

14.2.4 EXCEPTION-CONTINUE-SEARCH550

14.2.5 全局展开553

14.2.6 停止全局展开555

14.2.7 关于异常过滤程序的进一步讨论556

14.2.8 GetExceptionInformation560

14.2.9 SEH异常情况示例应用程序565

14.2.10 SEH SUM示例应用程序575

14.3 软件异常情况582

14.3.1 SEH软件异常情况示例应用程序584

14.3.2 未处理的异常情况595

14.3.3 没有调试器附属时的未处理异常情况596

14.3.4 关闭异常情况消息框598

14.3.5 自己调用UnhandledExceptionFilter600

14.3.6 未处理的核心态异常情况600

15.1.1 单字节与双字节字符集602

15.1 字符集602

第15章 UNICODE602

15.1.2 Unicode:宽字节字符集603

15.2 为什么要使用Unicode604

15.3 如何编写Unicode源代码604

15.3.1 Windows NT和Unicode605

15.3.2 Windows 95和Unicode605

15.3.3 C运行时库中对Unicode的支持605

15.3.4 Win32定义的Unicode数据类型610

15.3.5 Win32中的Unicode和ANSI函数611

15.4.1 Win32中的字符串函数613

15.4 使你的应用程序区分ANSI和UNICODE613

15.4.2 资源615

15.4.3 文本文件616

15.4.4 在Unicode与ANSI之间的字符串转换616

15.4.5 Windows NT:窗口类和过程620

第16章 闯过进程的边界墙622

16.1 为什么需要打破进程边界墙:一个例子622

16.2 使用Registry来注入一个DLL624

16.3 使用窗口钩子来注入一个DLL626

16.3.1 Program Manager恢复示例应用程序627

16.4 使用远程线程来注入一个DLL642

16.4.1 如何装入一个DLL642

16.5 影响其它进程的Win32函数642

16.5.1 CreateRemoteThread643

16.5.2 GetThreadContext和SetThreadContext644

16.5.3 VirtualQueryEx和VirtualProtectEx648

16.5.4 ReadProcessMemory和WriteProcessMemory648

16.6 创建一个函数来把DLL注入到任意进程的地址空间内649

16.6.1 版本0:为什么显而易见的方法就是不起作用649

16.6.2 版本1:手工编码的机器语言650

16.6.3 版本2:AllocProcessMemory和CreateRemoteThread652

16.6.4 ProcMem实用函数656

16.6.5 InjectLib函数659

16.7 测试Injectlib函数669

16.7.1 注入库测试示例应用程序669

16.7.2 Image Walk动态链接库671

16.8 小结674

附录A 消息拆析器676

A.1 消息拆析器677

A.2 子控制宏680

A.3 API宏681

附录B BUILD环境682

B.1 ADVWIN32.H头文件682

B.1.1 Warning Leve14(四级警告)682

B.1.2 STRICT宏682

B.1.3 Unicode683

B.1.4 ARRAY-SIZE宏683

B.1.5 BEGINTHREADEX宏683

B.1.6 链接器指令684

B.2 不能在源文件中设置的项目Settings(设置)687

1996《Windows95 Windows NT3.5高级编程技术》由于是年代较久的资料都绝版了,几乎不可能购买到实物。如果大家为了学习确实需要,可向博主求助其电子版PDF文件(由(美)Jeffrey Richter著;郑全战,阿 夏译 1996 北京:清华大学出版社 出版的版本) 。对合法合规的求助,我会当即受理并将下载地址发送给你。

高度相关资料

高级Windows程序设计技术(1996 PDF版)
高级Windows程序设计技术
1996 上海:同济大学出版社
Auto CAD12 for windows 高级核心技术( PDF版)
Auto CAD12 for windows 高级核心技术
清华大学出版社
FOXPRO ROR WINDOWS 高级成程序设计技术( PDF版)
FOXPRO ROR WINDOWS 高级成程序设计技术
FoxPro for Windows高级程序设计技术(1995 PDF版)
FoxPro for Windows高级程序设计技术
1995 北京:海洋出版社
Windows高级程序设计(1994 PDF版)
Windows高级程序设计
1994 北京:电子工业出版社
AutoCAD 12 for Windows高级核心技术(1995 PDF版)
AutoCAD 12 for Windows高级核心技术
1995 北京:清华大学出版社
Windows NT3.1编程技术(1998 PDF版)
Windows NT3.1编程技术
1998 北京:电子工业出版社
高级Windows编程技术(1999 PDF版)
高级Windows编程技术
1999 西安:西安交通大学出版社
Windows 98高级技巧(1999 PDF版)
Windows 98高级技巧
1999 杭州:浙江科学技术出版社
Windows95实用编程技术C/C++(1996 PDF版)
Windows95实用编程技术C/C++
1996 成都:四川大学出版社
UNIX高级编程技术(1994 PDF版)
UNIX高级编程技术
1994 上海:上海科学技术文献出版社
高级Windows程序设计技巧(1995 PDF版)
高级Windows程序设计技巧
1995 北京:机械工业出版社
Visual C++ Windows实用编程技术(1996 PDF版)
Visual C++ Windows实用编程技术
1996 北京:北京航空航天大学出版社
C++高级编程技术(1994 PDF版)
C++高级编程技术
1994 北京:电子工业出版社
精通Windows NT编程技术(1994 PDF版)
精通Windows NT编程技术
1994 北京:电子工业出版社