六刷 4130本

《Windows 95 系統程式設計 - 虛擬機器與 VxD 程式設計
System Programming for Windows 95

侯捷 譯

oney.jpg (16686 bytes)

繁體版 勘誤

完整電子書開放


【基本資料】

書名:Windows 95 系統程式設計 - 虛擬機器與 VxD 程式設計
出版:松崗 1999.01
ISBN:957-22-3027-1
頁數: 17 章 790 頁
定價:NT$ 860.0

原著:System Programming for Windows 95
原著作者:Walter Oney
原著出版:Microsoft Press, 1996
原著ISBN:1-55615-949-8
原著定價:US$ 39.95

【譯序】

我於 1997 年初譯完 Matt Pietrek 的 Windows 95 System Programming Secrets (中譯為 Windows 95 系統程式設計大奧秘,旗標出版)之後,網路上的 CompBook(電腦書訊)版貼出了這樣一則 post:

作者 Imanaka (八方歸去)
時間 Sat Mar 15 01:05:29 1997

Matt Pietrek 我最崇拜的作家
Windows 95 System Programming Secrets 我最愛的書
現在居然有中文本了...看來我又得去買一本中文本,中英對照看了

任何喜愛 Windows 程式的人千萬不能錯過這本書... 不過得先懂點 SDK 就是了... 看完這本書後,幾乎能解答所有關於 Windows 95 OS 方面的疑問... 大家快去買吧!侯俊傑先生既然有勇氣翻譯這種高技術性的書籍,大家也應該多多支持和鼓勵,這樣才有更好的翻譯書...例如 Inside OLE 或是 System Programming for Windows 95 等等。嘿嘿!會不會太狠了點?

不,不會太狠!現在,這本 Windows 95 系統程式設計 - VMs & VxDs 就是我對所有需要系統層面的進階好書的讀友的回應。

這本書的原文出版日期是 1996 年第二季。我一向對 Virtual Machine 和 Virtual Device Driver(VxD)的原理甚感興趣,因此很快就享用了原文本。一年半載過去,中譯本卻一直未見面世!國內電腦書商爭取譯權的動作向來十分迅速,這麼好而且重要的一本書遲遲沒有中譯本,我唯一能夠想到的原因是,和內容深度以及市場考量有關。

事實上,市場的憂慮是多餘的,臺灣PC工業如此發達,對於這類書籍已經到了求書若渴的程度。臺灣電腦出版界對於高階技術領域的無能為力,才真令人憂慮;臺灣高階技術翻譯人才的凋零難覓,能者不為,為者不能,才真令人憂慮。

1997 年春夏兩季,我應新竹科學園區多家廠商之邀(包括睿昱半導體、華邦電子、力捷電腦...),開授總近 100 小時的 Windows 作業系統課程。在系統軟體層面,我採用Windows 95 System Programming Secrets 做為教材(噢噢,當然是採用我的中譯本 J );在低階VxD的入門層面,則為學員大量補充這本 System Programming for Windows 95 的內容。其後,1997 年末松崗公司爭取了此書之中譯權,委由我負責翻譯。這對期待高階好書的讀者而言是一個美好的開始,對我而言則是一個艱鉅的任務。但我期許自己,藉由徹底熟讀此書的機會,提昇自己的技術水平,也藉此為國內需要瞭解系統低階技術以及撰寫 VxD 之眾多工程師盡一份心力。是的,工程師閱讀原文書不是問題,但一本好的譯本可以在閱讀效率和吸收效率上帶來極大的幫助。

Windows 95 System Programming Secrets(Matt Pietrek 著)的讀者,大概會對這本名稱相似的System Programming for Windows 95(Walter Oney著)乍見之下感到疑惑。基本上 Matt Pietrek 是在軟體層面討論作業系統,包括 processes、threads、modules、memory management、executable file format、windowing system、messaging system...。其中雖討論了 VxD,卻是以使用者角度切入。Walter Oney 這本書走的是更低層次,從虛擬機器(VM)來看 Windows 95 作業系統,並以大量篇幅介紹VxD 程式設計的技術與實作細節(包括 Plug & Play device, Communication Driver, Serial Port, VCOMM, IOS, IFS...)。其內容之詳盡豐富,技術之深刻紮實,實在是這個領域的罕見好書,是一本由淺而深,涵蓋初中高階的詳實好書。

對於任何需要撰寫 Windows 9x 驅動程式的朋友,或是想瞭解 Windows 9x 低階面貌(虛擬機器層面)的朋友,我鄭重向您推薦此書!

翻譯此書的10 個月之中,Windows 98問世了。我想許多人都對Win98 WDM和Win95 VxD 之間的異同與定位,感到興趣。本書作者已在「前言」第一頁(頁碼17)針對這一部份提出了他的看法,有興趣的讀者請特別注意。基本上,Win98 的WDM 係以VxD 模擬出來。VxD仍然是Windows 9x的原生(native)技術。也因此,本書所有技術均適用Win95和Win98

我向來喜歡拿高階技術書籍挑戰自己的極限。這本書,實在說,後半部的 driver程式實務已經超越了我的極限。本書原擬以合譯方式,由我負責前半,由業界朋友負責後半。後因朋友過於忙碌,遂幾乎全部由我完成。為了讓後半部也有良好的水準,特別商請華碩公司幾位好朋友幫助檢閱。他們提出了許多技術上的見解,也提供了許多註解。這本書能夠在此刻以目前的水準出現於各位眼前,他們功不可沒。當然,本書的一切責任,仍然是屬於我的。

完成了這本書,如果還有人拿 Inside OLE 叫我譯,我真要「從命不如恭敬」了 。

侯俊傑 1998.12.01 于新竹

高雲慶先生:第11, 12章及5, 6, 10, 17章的「中斷」部份
張訓賓先生:第13章
吳俊良先生:第14章
林居輝先生:第15章
林偉博先生:第16章

對於他們的協助,我在此致上深深謝意。如果有更多業界朋友願意抽出時間在教育事業上出力,我們的高階翻譯人才及高階實務書籍,當不至凋零至此。

【翻譯風格】

以下是本書對於譯詞的處理原則,以 Q/A 方式呈現,由此可略窺本書風格:

Q: 原文名詞,時而譯之,時而未譯。

A: 由於電腦技術書籍(尤其如本書之類)有非常多的函式名稱、常數名稱、術語,在大量中英文夾雜的情況下,我個人並不絕對考量(實在也沒有能力做到)整體的譯詞統一和「該譯都譯」的層次。反倒是以「本書讀者之程度可接受,並可獲得原詞之隱含意義」為重要考量。舉個例子,page, paging, pageable, 如果我把 page 譯為分頁(名詞),paging 譯為分頁(動詞),這基本上已經不太理想了。饒是如此,pageable 或可譯為「可分頁的」,page fault 或可譯為「分頁失敗」,page swapping 或可譯為「分頁置換」。但因我已保留了 page 一詞,只好對於 paging, pageable, page fault, page swapping 統統保留。相信這是本書讀者樂見的。又例如,communication port error 雖可譯為「通訊埠錯誤」,但先前我都保留 port 這個詞,所以...。此外,像 request 一詞,是我們工程師常掛在嘴上的,所以也保留了。

但是,留下這麼多原文名詞,再加上函式名稱、常數名稱、變數名稱、結構名稱...,整本書在某些地方變得蟹形字密度過高,這時候我可能又對於某些原已保留原文但若譯為中文亦還可接受的詞,改用中文(在不造成迷惑的情況下)。

另一種情況是,我們或許可以把 entry 譯為項目、條目、條孔、條格,但面對 IO service entry 我卻不好譯為「IO service 項目」或「IO service 條目」。換句話說在一串完整的名詞裡,我比較不喜見到中英夾雜的現象。

再一種情況是,例如,三種 drivers:"Nonompliant" drives,"Port" drives 和 "Generic" drivers。我們或許可將第三種譯為「通用型 driver」,但為與前兩者位階相等,仍沿用原文。

再拿 "hook into" 為例,每一位有能力閱讀此書的讀者,都知道 hook 的意思。如果我前面保留了 hook 一詞,我也只好保留 "hook into" 這個詞,才有精簡的表現與足夠的意義。

cache 和 caching 也是一樣的情況。queue, queued, queueing 也是一樣的情況。 

Q: 未譯之英文名詞加上 s,或未譯之英文動詞加上 ed,讀來非常不順。既然是中文書,理應依照中文單複數慣用法。

A: 中文很少有複數用法,只能加「們」,但「虛擬機器們」或「裝置們」是很滑稽的。在譯文中出現「名詞加 s」或「動詞加 ed」的情況,某些時候可以讓讀者更清楚意義。不過,我也的確發現不少非必要的 s 或 ed,這種情況下我便把它們拿掉了。

Q: 已經出現在章前註解或已中英文對照過的詞,不必每次都中英文同時出現。例如 mount 或 reentrant 或 entry。

A: 有些字我很想一直使用原文,例如 mount,例如 reentrant,例如 entry。但出現過多次之後,又使我信心動搖,覺得怪怪。尤其對於動詞,例如 mount,如果說:「我 mount 了一個硬碟」,似乎怪怪的,說「我裝載了一個硬碟」,又似乎沒有讓讀者得到 mount 的那個意思。所以,既然不太費事,我也就常常不厭其煩地讓這一類詞的中英文一起出現。

事實上大家都有經驗,讀一本書不見得從頭看起,也可能是日後需要抽出某個章節看三五頁。對於上述之類的動詞或名詞,如果突然看到,而沒有注意先前曾出現過的中英對照,就會覺得奇怪或不解。因此我常常不厭其煩地讓這一類詞中英文並現。

Q: 有些詞似乎不必再原文對照。

A: 這大約是指諸如 send 或 flush 之類的詞。send 若譯為傳送或送出,讀者不知道它是 send 或是 post(這是兩種不同的訊息傳遞方式)。flush 若譯為清除,讀者可能會以為是 clean up 或 reset。舉一句為例:

你應該掃清(flush)任何 cache,並清除(clean up)你所握有且代表volume 的其他資源。

諸如此類的問題,在一整本書籍裡,層出不窮,很難做到符合每個人的理想。

換句話說,「統一譯詞」以及「中文形式之完整」這兩項,在此書已經難以企及了,所以我比較寧願「得義而忘言」。

當然,很多詞句的順眼與否,都根源於閱讀者的個人習慣。儘量減少讀者的疑慮,是我最大的考量(然而我的作法,其實也根源於我個人的閱聽習慣)。

本書 11~16 章,有許多檢閱者的註解。每一個大型註解皆以檢閱者為名,例如 11,12 章為高雲慶註,13 章為張訓賓註... 依此類推。如果以「譯註」起頭,那就是譯者我(侯俊傑)所寫的註。

 

目 錄

譯 序 / 001

目 錄 / 011

前 言 / 017

第一篇 導入(Introduction) / 001

第1章 概觀(Overview) / 003

誰應該閱讀本書 / 004

本書組織 / 005

本書程式實例 / 007

關於所有的未公開技巧(Undocumented Hacks) / 008

關於所有的公開技巧(Documented Hacks) / 008

第2章 各式各樣的 Windows 和 Drivers / 011

Windows 系統分類 / 012

Windows 驅動程式的主要沿革 / 018

第3章 Windows 95 系統架構 / 023

虛擬機器(Virtual Machines) / 025

Processes and Threads(行程和執行緒) / 031

Windows 應用程式 / 033

MS-DOS 和 MS-DOS 應用程式 / 039

第4章 系統程式設計之介面 / 045

虛擬裝置驅動程式(Virtual Device Drvers) / 047

Win32 API / 057

相容性介面(Compatibility Interfaces) / 062

第5章 以 assembly 語言進行系統程式設計 / 071

定址模式(Addressing Modes) / 072

32 位元程式設計 / 085

系統程式設計的特質 / 093

第二篇 虛擬裝置驅動程式 基礎技術 / 105

第6章 虛擬機器管理器(The Virtual Machine Manager) / 107

記憶體管理 / 108

中斷(interrupts)的處理 / 112

對執行緒(Threads)進行排程 / 123

第7章 虛擬裝置驅動程式(VxD)之相關技術 / 131

可執行檔格式(Executable File Format) / 132

VxDs 的節區架構(Segmentation of VxDs) / 133

VxDs 的聯結(Link Scripts for VxDs) / 136

以 assembly 語言撰寫VxDs / 139

以 C 或 C++ 撰寫VxDs / 151

第8章 Virtual Device Drivers 的起始與終結 / 183

靜態的(static)VxDs / 184

一個靜態(static)VxD 的起始與終結 / 191

動態的(dynamic)VxDs / 209

一個動態(dynamic)VxD 的起始與終結 / 213

第9章 VxD 程式設計基礎技術 / 217

VxD Service介面 / 217

基礎資料結構 / 234

配置記憶體 / 251

處理Events / 259

執行動作的同步控制(Synchronizing Execution) / 268

第10章 協助 Windows 95 管理虛擬機器 / 287

虛擬機器的生命週期 / 288

V86 Region / 292

軟體中斷 / 303

給應用程式呼叫的 APIs / 319

呼叫 Windows 應用程式 / 327

第三篇 I/O 程式設計(Input/Output Programming) / 343

第11章 Plug and Play(即插即用) / 345

硬體如何運作 / 346

Configuration Manager(組態管理器) / 354

Device Information Files(裝置資訊檔) / 378

第12章 對裝置做組態規劃(Configuring Devices) / 399

邏輯組態(Logical Configuration) / 400

裝置驅動程式(Device Drivers) / 408

資源仲裁器(Resource Arbitrators) / 417

硬體設定檔(Hardware Profiles) / 430

與使用者之間的介面 / 434

第13章 Input/Output 程式設計 / 447

硬體基礎 / 448

硬體資源虛擬化 / 462

撰寫 Ring0 Drivers / 503

第14章 通訊裝置驅動程式(Communications Driver) / 519

架構概觀 / 520

Serial Port Drivers / 530

VCOMM 中的其他 VxDs / 584

第15章 Block Device Drivers / 593

IOS 的架構 / 594

和 IOS共事的技術 / 605

實際建立一個Driver / 658

第四篇 擴充作業系統 / 675

第16章 可安裝的檔案系統(Installable File Systems) / 677

使用 IFS Services / 678

Local File System Driver / 701

第17章 DOS 保護模式介面(DPMI) / 747

切換到保護模式 / 748

DPMI 函式 / 751

附 錄 Plug and Play Device Identifiers / 777

Windows Generic Device Identifiers / 777

Device Type Code / 788

【讀者來函】


作者 yammy.bbs@csie.nctu.edu.tw (傲笑紅塵是主角), 看板 CompBook
時間 交大資工鳳凰城資訊站 (Tue Jan 12 23:32:55 1999)
───────────────────────────────
: <System Programming for Windows 95> 譯本早於 12 月中旬交稿。
: 松崗已於 12 月下旬付印。雖然我還沒有收到書,算算日子不是今天
: 也該是明天了吧。

呵呵~~~~~我買到了, 860NT,在譯序的地方有 Imanaka的post
是那時Windows 95 System Programming Secrets翻譯本大奧秘出版時
所 post 的

看很幾次原文老是陣亡,希望這次有了好的中譯本能讓我學的更多看的更深
老師,謝謝您


作者 roger214 (Dont' ask me why!) 看板 CompBook
時間 Thu Jan 14 13:27:14 1999
───────────────────────────────
嗯,我在高雄也買到了,不過我這邊買怎麼那麼便宜?731元而已耶!:p
在建國二路上的儒林,只有這一本,今天剛到的。說不定是整個高雄唯一
的一本說(因為其它家有賣電腦書的都被我找遍了:p)


作者 WeiPo.bbs@csie.nctu.edu.tw (Weber), 看板 CompBook
時間 交大資工鳳凰城資訊站 (Wed Jan 13 11:18:11 1999)
───────────────────────────────
==> 在 dyliu@ms1.hinet.net (四眼的王蟲) 的文章中提到:
: On 13 Jan 1999 01:58:01 GMT, WangWorm.bbs@bbs.ee.ncu.edu.tw (王蟲)
: wrote:
: > 說到 "System Programming for Windows 95" 這本書
: > 以書名來看是指明 for win95
: > 不知道書中提到的技術和概念
: > 可否直接套用在 NT 上呢?
: > 我個人覺得可能有些差距(是嗎? )
: > 不知道實際上有多少相異處呢?
: Windows 95 的 device driver 架構與 NT 的 device driver
: 架構差異甚大.

WDM 與 NT Kernel Mode Driver 也有所差異,
由其 WDM 的重要特色: Stream Class Driver 的架構, 有用到
大量的 COM Interface, 使 filters 之間能進行連接工作.

回歸到 Title: COM 早已經滲透到 Window Kernel 了, 以後寫
WDM Driver, 或多或少要知道一些 COM 的常識.

以前老大常唸我花時間搞些有的沒的, 如 ActiveX, COM, OO 等,
看樣子現在總算有派上用場了.


作者 Imanaka (C++ Zealot) 看板 CompBook
時間 Thu Jan 14 01:43:39 1999
────────────────────────────────
※ 引述《yammy.bbs@csie.nctu.edu.tw (傲笑紅塵是主角)》之銘言:
> 呵呵~~~~~我買到了, 860NT,在譯序的地方有 Imanaka的post
> 是那時Windows 95 System Programming Secrets翻譯本大奧秘出版時所
> post的 看很幾次原文老是陣亡,希望這次有了好的中譯本能讓我學
> 的更多看的更深  老師,謝謝您囉

嗯 860元...
看到這篇Post 一大早馬上跑去看
My God! 我的id真的在第一頁....
不買回來都不行...:P

先看了前一百頁, p.76 的 Segment descriptor的圖
漏掉了 Segment limit bits 19:16....
快期末考了 只好先擺著....
不過翻得真不錯 :)


> 送件者: Hsiao Tsu Tair <tuetai@ms15.hinet.net>
> 收件者: jjhou@ccca.nctu.edu.w
> 主旨: Windows 95 系統程式設計(虛擬機器與 VxD程式設計) 感想
> 日期: 1999年1月13日 AM 02:01
>
> 侯先生您好:
>
> 您剛上市的新書: Windows 95 系統程式設計(虛擬機器與 VxD程式設計)我今天
> 剛買回來.大略翻了一下,發現這本書除了翻譯成中文外,最有價值的部分應該是
> 從到11章到16章由華碩工程師所加的譯註,這些譯註可說是補足了原文說明的不
> 足與 Windows Driver 實作時發生的問題,相信必然能幫助許多像本人一樣欲跨入
> 或從事 Windows Driver 寫作的人.

>
> 目前我手邊除了有這本書的原文書(一個月前買的)外,另外還有兩本有關
> Windows NT4 Device Driver 的書如下:
>
> 1. The Windows NT Device Drive Book
> Art Baker
>
> 2. Windows NT Device Drive Development
> Peter G.Viscaroa & W.Anthony Mason OSR Inc.
>
> 由於 Windows 98 與未來的 Windows 2000(Windows NT5) 都支援 WDM Driver,
> WDM Driver 必然是未來 Wndows Driver的標準,雖然目前市面上並沒有有關於
> WDM Driver 寫作書籍,但因為 WDM Drver 起緣於 KDM Driver (for Windows
> NT4)+ plug & play.....等等,
> 因此本人想從 Windows NT Driver 入門(必要時配合閱讀 Inside Windows NT 這
> 本書),若行有餘力再看您翻譯的這本書,希望您給我一些建議好嗎?
>
> 另外, Systems Programming for Windows 95 這本原文書有許多 errata, 這封
> E_mail 的 Attach 正是從 Walter Oney 的網站 Download 下來的堪誤表,希望您
> 這本中譯本在未來再版時能加以更正這些 errata, 謝謝!


●侯俊傑回覆

蕭兄:

謝謝您的熱心。<Windows 95 系統程式設計 - 虛擬機器與 VxD 程式設計>
未將 Walter Oney 網站上的 errata 納入,是我的疏忽。我會:

核對頁碼,在此 errara 上添加中文版頁碼,然後刊載於我的網站上

您提到華碩工程師為 chap11~chap16 所加的譯註的貢獻,足以令我及華碩的朋友們開心,欣慰心血沒有白費。這些朋友平常工作緊得要命(股王可不是那麼好當的 :)),他們願意撥出時間來做這種「幾乎沒有收益」的工作,我想是使命感與理想個性使然。而我自己,這麼做的原因,一方面固然因為那些章節是我的弱處,需要朋友幫忙,一方面是希望起個示範,告訴所有出版電腦翻譯書的朋友,什麼是做書的嚴謹態度。

當然,您對此書的印象,都還只是乍見之下的印象。盼您以及所有讀者,都繼續給我指正。

您提到希望侯捷給一些關於 Windows NT driver 學習和閱讀上的建議。這一部份,我想以 WeiPo 兄的實務經驗與熱心,是最合適人選了。WeiPo 正是 <Windows 95 系統程式設計 - 虛擬機器與 VxD 程式設計> chap16 的檢閱者。

WeiPo 兄,請發言… :)

--- the end