二刷 1000本(1997/04)  
一刷 3000本(1997/02)  

《Windows 95 系统程式设计 大奥秘》
Windows 95 System Programming SECRETs

侯捷 译

matt.jpg (21919 bytes)

繁体版 勘误

 书内程式源码下载

完整电子书开放


书名:Windows 95 系统程式设计 大奥秘
出版:旗标 1997.02
ISBN:957-717-255-5
页数: 10 章,766 页
定价:NT$ 860.0

原着:Windows 95 System Programming SECRETs
原着作者:Matt Pietrek
原着出版:IDG Books, 1996
原着ISBN:1-56884-318-6
原着定价:US$ 49.99

【译序】

山川壮丽 鬼斧神工

(译 序)

这是截至目前我所译过难度最高的一本书。所幸我一直就在这个领域里头做学问,也早就钻研过了原着,才能够在一百天的时间里完成它。我与作者 Matt Pietrek 神交已久。不,我并不认识 Matt,我是指他在杂志和期刊上的许多文章,早就成为我的重要精神粮食。可以说,在作业系统这个领域,他一直是我的导师。

关於作业系统,书籍的取材可以很广,譬如 Walter Oney 的Systems Programming for Windows 95(Microsoft Press)着重在作业系统与硬体之间的介面、驱动程式与 VxDs,旨在从硬体与轫体(firmware)层面看系统。Jeffrey Richter 的Advanced Windows(Microsoft Press)着重在 32 位元架构,以及与系统核心有关的 API 函式,旨在从 Win32 API 的层面看系统。但是,别忘了,Windows 95 有许多 16 位元「遗老」在其中,而且扮演吃重的角色。Matt 的这本 Windows 95 system programming SECRETS(IDG Books)着重在 16-/32- 位元核心资料结构的介绍,及其相关函式(含未公开函式)的内部动作。这些核心资料结构包括 modules、processes、threads、tasks。本书也对 KRNL386 / KERNEL32、GDI / GDI32、USER / USER32 三大模组做了非常彻底的挖掘,几乎到了寸草不留的地步。此外,隐藏在三大模组背後的 VMM、VWIN32、ADVAPI32 等神秘的 VxDs,作者也有非常深入的剖析。PE 可执行档格式对於 Win32 程式载入、DLL 模组载入、函式输入(imported)、函式输出(exported)、动态联结机制等题目,有密不可分的关联,而 Matt 对於 PE 档案格式的透彻分析,让我们有醍醐灌顶之感。

系统的剖析之外,Matt 还公开了他的私房菜。第9章是他使用各种分析工具的经验,以及反组译的实务心得。第10章(最後一章)的 spy 软体设计,则是对整个系统结构工程的总验收。Matt 让我们见识什麽叫做山川壮丽,什麽叫做鬼斧神工!我非常欣赏这一章,研读的同时画下数十张草图,才彻底掌握其精神。这些技术在 Matt 而言易如反掌折枝,因为他是顶顶有名的 BoundsChecker 除错器的建构者。

本书深度,勿庸置疑。本书密度,勿庸置疑。以资讯份量而言,Matt 的书真正是物超所值!

关於 Windows 作业系统,虽然我自己也写一些东西,我想我肯定及不上 Matt,但是关於知识的表现,Matt 可就未必及得上我了。这本书的缺点,就在於 Matt 惜图如金。许多观念,其实配合一张图就可以表现得淋漓尽致,Matt 却不。整本书虽然有些不错的示意图,但和浩瀚字海比起来,彷佛沧海一粟。有时候我有为他画张图的冲动,却总是强忍下来,毕竟我是译者,不是作者。Matt 的文风活泼主观,相当好看,但有点罗哩八嗦。这一点我尽力让它洗炼些。此外,原书有不少错别字,想是当初为了赶 Windows 95 上市热潮所致。不必担心,中译本都改过来了(除非我没发现)。

钻研 Windows 95 系统,是不是一项划算的投资?不是还有 Windows NT 吗?95 和 NT 不是有许多不同吗?我不想谈 Microsoft 的策略权谋,我想告诉你,学问是堆积起来的。基础愈深,堆得愈高;基础愈广,堆得愈快。触类旁通是我在这个千变万化一日千里的领域中最大的感受和依侍。这本书让我们全盘了解 Windows 95,而 NT 只在隔壁房间。

侯俊杰 1997.01.30 于新竹

後记:

写下这一篇序的同时,我一边听着世界三大男高音世纪联演的现场录音 CD。星光闪耀的温润高音冲击我的耳鼓,令我感到晕眩悸动。万马奔腾的男高音当然是一种艺术的极致,静悄悄的文字艺术具有同样震憾人心的能力。如果一首冲上高音 C 的人声曲是艺术,令你血脉贲张,一本让你握拳大喊 eureka,令你整夜兴奋睡不着觉的技术书籍,算不算得上也是一种艺术?

文字创作当然是一门艺术。即使是技术性的文字创作,我也当它是一门艺术。翻译是一门艺术,即使是技术性文字的翻译,我也视之为一门艺术。

这本书探触了影响当今桌上电脑生态最巨的 Windows 95 系统深处,让我们见识了技术之美。也许有人认为 Windows 内部九拐十八弯的动作哪称得上美,我要这麽说,它呈现了一种难以想像的复杂度和巨大架构,也是美的另一种形式。Matt Pietrek 这本书的内涵具备了绝对的质量,但其形式却没办法彰显出艺术的光华,离我的理想还有一大段距离。因为温故,也因为知新,我从这本书中获得许多宝贵的东西。我将以此加上我已经筹划一整年的稿子,近百幅图片,完成一本取材不尽相同,手法完全迥异,真正符合我心目中艺术份量的 Windows 作业系统书籍。

等着瞧,朋友。

再刷感言

大奥秘(我对此书的昵称)第一刷 3000 本。一个半月再刷。

我真开心。

我太开心了!

不论你是因为书籍内容,或是因为作者 Matt Pietrek,或是因为译者侯俊杰,拿起这本书,我想你可能不是第一次成为我的读者,可能对我有点认识,可能知道我开心为了什麽,不为了什麽。

这本书技术层次深,价格高贵,我从来不敢想像它中译出来後的市场反应。事实证明,好书不寂寞。一位从事系统技术的朋友以「欣喜若狂」来形容他在书店看到此译本的情绪。一位读者说如果不是这译本,他虽然知道原着好,恐怕也无缘一读。一位朋友则说,原书售价 1350,译本才 860,又是侯 sir 制作,开玩笑,为什麽不买?BBS 上有人说,作者 Matt Pietrek 和译者侯俊杰,超强组合,一定要买。

而我说,我重新确定了一种信心。

这本书一完成,我也成为它的一个读者,而且我相信不会有人比我读得更烂熟。我用这本书做为大学教材,也用这本书为科学园区的工程师朋友们开了好几次课程。每一次翻阅这本书,就着读者的心情,我不但感谢 Matt Pietrek 的苦心孤诣,提供我们那麽完整而难得的资料,我也感谢我们的出版社,愿意花大笔签约金,大笔制作费,在大奥秘这样层次的书籍上做中文化的功夫。你知道,即使初期市场反应良好,我也不敢预期出版社什麽时候才能「损益平衡」!

世有伯乐,而後千里马出。我还特别感谢一个人。

侯俊杰 1997.04.12


P.S. 第一刷的图3-2和图8-1有误,已在新刷中更正。同时亦更正了一些错别字。关於这些错误,我在这里向读者道歉。

【原序】

奇穴探险

(原 序)

Windows 95 System Programming SECRETS 是 Matt Pietrek所写的第三本有关於如何真正了解 Windows 系统的书籍。Matt 已经在上面耕耘了相当一段时间。他的技术大师生涯始自 1988 年的 Santa Cruz 大学毕业典礼。他获得的是物理学位,只修过两门电脑课程。在加入 Borland 技术支援部门之後,他很快因为一次评量而看清自己 -- 他获得的是最低分。

转到 Borland R&D 部门的那段时光比较乐观。在那里 Matt 写了 TDUMP 和 WinSpector。他甚至加入 OS/2 Turbo Debugger 的开发。他的辛勤工作获得了丰富的报酬:在一次裁员行动中,他失业了。最後,Matt 终於在 Nu-Mega 公司找到了自我。今天他是 BoundsChecker 系列产品的主要建构者。

我第一次遇到 Matt 是在 1991 年春天,我们都叁加了Software Development conference。在那个场合中我们这些 Windows 拥护者被视为异类。Charles Petzold 和我是 "Windows v.s. OS/2" 的小组成员。我们被其他小组成员大加挞伐,并且被观众激烈质问刁难,只因为我们预测PC 作业系统的主导荣冠将在不久的未来落在 Windows 头上。

看来Matt、Charles和我是对的 -- 事实上Windows如今已经超越了技术领域,变成文化的一部份。在 Windows 95 开始销售的那个周末,它的总收入超越侏罗纪公园。在所有夸大的宣传背後,谢天谢地,还是有很多的牛肉在,而且发出嘶嘶声。客户从 Windows 3.1 移转至Windows 95,使我们终能免除记忆体模式的不安(那是我们经验多年的痛苦回忆),使我们得以全面进入 32 位元。

如果 Windows 是一个大洞穴,这本书就是给那些不因 Win32 API 而满足,想要探索洞穴的人的最佳礼物。在 Windows 95 巨大洞穴中,Matt 是第一流向导。事实上这本书原本叫做「Windows 奇穴探险」。许多其他的 Windows 95 程式开发书籍(包括名为 Unauthorized 的那一本),都承诺为你照明所有的黑暗,却早在一年前或数年前就完成。那些作者为了抢夺「第一本书」的名衔争破头,但从 1994 年五月的 Chicago beta1 之後就封刀了。其中一些书籍甚至资料老旧,假设错误。

Matt 就不一样了。他细细观察 Chicago 的每一个版本,包括 Windows 95 的最後问世版,带给你最新资料,也就是本书所提供的。现在,戴上你的安全头盔,点亮你的强力照明灯,展开惊心动魄令人难忘的奇穴探险吧!

Eric J. Maffei
Microsoft Systems Journal 主编
纽约,1995 年九月
ericm@microsoft.com

【目录】

目录提要

第1章 透视 Windows 95

本章温习 Win32 作业系统(Windows NT、Win32s 和 Windows 95)的历史背景。你可以得知每一个作业系统的优点与弱点,以及其他 Win32 环境如 OS/2 Warp 和 Phar Lap 公司的 TNT DOS extender。

第2章 Windows 95 有些什麽新东西

你将从这一章获得广泛的 Windows 95 架构概观,以及为什麽 Windows 95 从Windows 3.1 演化而来,而不是一个全新系统的原因。本章也谈到了高阶主题如记忆体管理、执行绪同步化控制、视窗系统的改善等等。

第3章 模组、行程、执行绪

检验 Windows 95 的模组、行程、执行绪之後,你就可以解开 KERNEL32 用来实现其资料结构之谜。本章的 Win32 函式虚拟码完全依赖这些资料结构。此外,你还会读到 thread local storage 和structured exception handling 两项主题。

第4章 USER 和 GDI 子系统

微软把 Windows 3.1 的视窗系统、讯息系统、绘图系统重新整修,放在Windows 95 之中。为了更了解它们,你必须学习 32 位元的 USER 和 GDI heaps,以及16位元USER heap 中的新资料结构对於所谓 free system resource 的影响。

第5章 记忆体管理

Windows 95 的 32 位元记忆体管理是相当复杂的一个领域。在这重量级的一章里,你可以探索以分页为基础(paged-based)的虚拟记忆体、分离位址空间、共享记忆体。每一个 Win32 记忆体管理函式也以虚拟码描述出来。

第6章 VWINKERNEL32386

Windows 95 有三个非常基础的核心元件:16 位元的 KRNL386、32 位元的 KERNEL32、以及 ring0 的 VWIN32.VXD。如果你把它们放在一起,就得到了 VWINKERNEL32386。检验三者之间的关系时,你会同时发现许多有用的函式 -- 虽然其中有一些是未公开函式。

第7章 Win16 的 Module 和 Task

千万不要忽略了 Windows 95 的 16 位元核心资料结构。虽然 Windows 95 是一个 32 位元作业系统,它的许多资料结构早在 Windows 3.1 之中就出现了,包括 task database以及16位元的 module database。这也显示了 Windows 95 内部的纷乱状态。

第8章 PE 与 COFF OBJ 档案格式

如果要充份了解 Windows 95,你就必须了解 Portable Executable(PE) 档案格式 -- 那是 Windows 95 和 Windows NT 的可执行档格式。本章还告诉你 COFF OBJ 和 COFF LIB -- 联结器用它们来制造 PE 可执行档。

第9章 寻幽访胜靠自己

如果你真正想进入 Windows 95 的核心,第9章告诉你怎麽做。你会学到如何使用档案倾印(dumping)工具和 API 刺探(spying)工具,以及如何检验反组译码,找出诸如区域变数、函式叁数、if 句型...等等东西。本章最後以一些颇有用处的经验提示收尾。

第10章 写一个 Win32 API Spy

以前数章知识为基础,本章告诉你如何产生一个可扩充的 API 刺探工具(spying tool)。这个spy工具可以记录API函式的运转过程,以及它们的叁数。