译者序 1
引言 1
目录 1
第一章 关于未公开的DOS技术的使用 9
1.1 为何不将功能公开 10
1.2 为什么未公开的DOS技术很重要 11
1.3 允许,但不支持 12
1.3.1 不支持TSR 12
1.3.3 支持调试器 14
1.4 对未公开功能的畏惧 14
1.3.2 网络重定向程序 14
1.5 保留的和未公开的80x86特性 16
1.5.1 未公开的汇编语言 17
1.5.2 LOADALL 18
1.6 使用未公开的DOS技术的程序在什么地方不敢涉足 19
1.6.1 其它Microsoft软件 21
1.6.2 使用了未公开的DOS技术的其它软件 22
1.7 不是不守规矩 23
1.8 仿真的DOS 24
1.9 未公开的DOS技术的分类 25
1.10 失去的四分之一的情况 27
2.1 使用已公开的DOS功能调用 28
第二章 使用已公开的和未公开的DOS技术编程的比较 28
2.1.1 在汇编语言里调用DOS 30
2.1.2 在C语言里调用DOS 31
2.1.3 在Turbo Pascal里调用DOS 35
2.1.4 在BASIC里调用DOS 35
2.2 使用未公开的DOS技术 37
2.2.1 魔力功能号揭秘 38
2.2.2 在汇编语言里使用未公开的DOS调用 40
2.2.3 在C里使用未公开的DOS调用 43
2.2.4 在Turbo Pascal中使用未公开的DOS调用 50
2.2.5 在BASIC中使用未公开的DOS调用 53
2.3 若不使用未公开的特性 54
2.4 检验未公开的DOS技术 55
2.5 一个重要的特殊情形:Novell NetWare 56
2.6 在保护模式下使用未公开的DOS调用 61
2.6.1 386 DOS-Exterder 62
2.6.2 DPMI 63
第三章 MS-DOS资源管理——内存、进程、设备 71
3.1 内存管理 71
3.1.1 内存控制块 71
3.1.2 怎样找到MCB链的起始位置 73
3.1.3 如何跟踪MCB链 75
3.1.4 MCB一致性检查 79
3.1.5 MEM程序的细节 81
3.1.6 分配时的预防措施 85
3.1.7 RAM分配策略 87
3.1.8 选择策略 88
3.2 进程管理 90
3.2.1 PSP:如何标识一进程 90
3.3 DOS终止地址 92
3.3.1 其它的PSP字段 93
3.3.3 定位父进程 94
3.3.2 创建子进程 94
3.4 设备管理 96
3.4.1 为什么有设备驱动程序 96
3.4.2 与硬件有关的内容 96
3.4.3 跟踪驱动程序链 97
3.5 从DOS命令行装入设备驱动程序 105
3.5.1 DEVLOD的工作过程 106
3.5.2 DEVLOD.C 108
3.5.3 MOVUP.ASM 115
3.5.4 C0.ASM 117
3.5.5 Make文件以及不修补EXE2BIN 121
3.5.6 DEVLOD的工作效果 123
第四章 DOS文件系统和网络重定向程序 126
4.1 物理磁盘:DOS怎样看待它 127
4.1.1 磁表面、磁道和扇区 127
4.1.2 逻辑扇区号和族的概念 128
4.1.3 FAT结构 129
4.1.4 目录结构 129
4.1.5 初始化FAT表和根目录 130
4.2 DOS内部变量表(List of Lists) 133
4.2.1 内部变量表是怎样组织的 134
4.2.2 内部变量表何时建立 136
4.3 当前目录结构(CDS) 145
4.3.1 访问CDS 148
4.3.2 搜索CDS 150
4.3.3 找出文件的真正名字 151
4.4 系统FCB 154
4.5 系统文件表(SFT)和任务文件表(JFT) 154
4.5.1 多少文件 154
4.5.2 哪些文件是打开的 155
4.6 调整文件系统 165
4.6.1 构造和去掉驱动器字母 166
4.6.2 释放孤儿文件句柄 168
4.6.3 更多的文件句柄 170
4.7 间接服务器调用 172
4.8 MS-DOS网络重定向程序 174
4.8.1 什么是重定向程序接口,怎样使用它 175
4.8.2 跟踪打开文件的过程 181
4.8.3 不同DOS版本的区别 182
4.8.4 重定向程序子功能 183
4.8.5 如何利用这些调用 187
4.8.6 示例程序:Phantom 188
4.9 小结 212
第五章 内存驻留软件——弹出及多任务执行 213
5.1 TSR:貌不惊人,功能非凡 214
5.2 未公开DOS功能的使用位置 216
5.3 MS-DOS的TSR程序 219
5.4 通用的TSR程序 221
5.5 使用MicrosoftC编写TSR程序 222
5.5.1 让一个Microsoft C程序驻留内存 226
5.5.2 不要急于驻留 228
5.6 堆栈的控制 229
5.7 TSR的未公开的DOS功能 231
5.7.1 MS-DOS的标志 231
5.7.2 获取和设置PSP 233
5.7.3 扩充错误信息 236
5.7.4 INT 28h中断 237
5.8 在通用TSR程序的内部 238
5.8.1 TSR命令行参数 258
5.9 利用DOS可交换数据区(SDA)来编写TSR 259
5.10 TSR退出驻留 264
5.11 TSR程序举例 266
5.11.1 TSRFILE 266
5.11.2 TSRMEM 268
5.11.3 TSR2E 271
5.12 多任务TSR 274
5.12.1 任务切换 275
5.12.2 MULTI装入 276
5.12.3 定时中断 276
5.12.4 空闲中断 277
5.12.5 键盘中断 277
5.12.6 打印 277
5.12.7 MULTLC 277
第六章 命令解释程序 286
6.1 命令解释程序的需求 287
6.1.1 获取操作人员的输入 287
6.1.2 解释操作人员的请求 291
6.1.3 调度相应进程 296
6.1.4 MS-DOS提供的挂接功能 299
6.1.5 TSHELL——一个简单的命令解释程序 305
6.2 COMMAND.COM的工作过程 308
6.2.1 三部分的分界点 310
6.2.2 使用环境 312
6.2.3 COMMAND.COM如何以及为何要重装入 325
6.2.4 INT 2Eh——COMMAND.COM的后门 326
6.3 COMMAND.COM的可替代程序 330
6.3.1 4DOS.COM 330
6.3.2 菜单系统 331
6.4 实例程序:主环境块编辑器 333
6.5 小结 342
第七章 MS-DOS调试器接口 344
7.1 装载但不执行 344
7.1.1 介绍一个子功能的调用 344
7.1.2 准备ExecBlock 345
7.1.3 维护当前的PSP 349
7.1.4 处理子进程的结束 352
7.1.5 程序实例:Monitor 353
7.2 调试程序与Windows下的内存移动 354
7.2.1 Windows的SEGDEBUG接口 355
7.2.2 来自Windows的消息 356
7.2.3 程序实例:报告Windows消息 358
7.2.4 附加的消息类型 359
7.3 小结 360
第八章 INTRSPY:一个探查DOS的程序 361
8.1 描述语言驱动的调试器和事件驱动的调试器 361
8.2 INTRSPY概览 362
8.3 INTRSPY的使用指南 366
8.3.1 描述语言 367
8.3.2 语法 367
8.3.3 出错消息 373
8.4.1 UNDOC 375
8.4 使用INTRSPY 375
8.4.2 LSTOFLST 377
8.4.3 记录机器的活动状态 379
8.4.4 监视磁盘的输入输出 380
8.4.5 MEM 386
8.5 编写一个通用的中断处理程序 387
8.6 Intel的INT指令所带来的问题 389
8.7 实现 390
附录A 未公开的DOS功能调用 395
附录B 参考文献 551
PC中断大全——INTRLIST软件简介 556