二刷 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函式的運轉過程,以及它們的參數。