附錄八 Windows 的版本


Windows 簡史

Windows 簡史

16 位元的 Windows 1.0、2.0、3.x

在民國 70 年到 83 年 ( 西元 1981 到 1994 年 ) 是微軟個人電腦作業系統,MS-DOS 的黃金年代,其霸主地位無人可撼動。但是隨著蘋果 Lisa、Macintosh 等圖形使用者介面 ( Graphical User Interface,簡稱 GUI ) 的發展,微軟深感威脅,也加緊開發下一代作業系統。那時,MS-DOS 使用的是命令列介面 ( command-line interface,CLI ),和現在的 Windows ( 只是在那時 Windows 還未誕生 ) 在外觀及操作上有很大的不同,而 Lisa、Macintosh 的操作界面與 Windows 一樣,都是 GUI。使用 CLI 和 GUI 這兩種界面的感覺,很不一樣,現在的人大概很難想像 CLI 界面。當你操作 CLI 界面的 MS-DOS 時,就與 Windows 的「命令提示字元」( 幸好 Windows 還留有這個東西,否則真的很難體會 ) 類似,但是又比「命令提示字元」更難用,因為 MS-DOS 一開機的畫面就進入 CLI,那畫面看起來就像一張黑紙上面有幾列文字,使用者得背熟指令,由鍵盤輸入指令,電腦接收到指令後,予以執行。相反的,圖形使用者介面的螢幕畫面看起來就像一幅美麗漂亮的照片,上面有許多視窗、提示等等物件,使用者以滑鼠操作視窗、按鈕、選單…等物件,每個視窗的操作方式都相同,連老嫗都能操作。( 曾有網友質疑小木偶的網頁,為何要以綠字黑底來顯示,老實說,小木偶第一台電腦的螢幕,就是綠字黑底的命令列介面 )

舉例來說。在 MS-DOS 時代,PCTools 和 PE2 大概是家喻戶曉的兩套軟體。而離開這兩套軟體回到 DOS 的操作方式卻不相同,前者要按 Esc 鍵,後者要按 F4 鍵。如果你沒背指令,根本無法停止程式執行。而操作圖形使用者介面的作業系統,要離開任何一個程式,只要把滑鼠游標移到視窗的關閉鈕上面,再按下滑鼠左鍵,就能關閉,不管哪個程式都如此。由於圖形使用者介面比命令列介面操作方便、直覺而且親和得多,因此作業系統邁向圖形使用者介面是無法阻擋的趨勢。

Windows 1.0 是微軟嘗試的第一個圖形使用者介面的環境,它發表於在西元 1985 年發表,後來在 1987 年、1990 年分別發行 Windows 2.0、Windows 3.0。這三種版本的 Windows 雖然都使用圖形使用者介面,但是只能算是 MS-DOS 的應用程式,它們必須在 MS-DOS 開機後,於 DOS 命令提示下執行,它們使用 DOS 的 FAT 檔案系統,也和 MS-DOS 的其他應用程式一樣,都是 16 位元的程式碼;但是它們與一般應用程式又有不太一樣的地方,它們可以執行屬於他們自己特殊格式的執行檔,也有自己的驅動程式。因此有許多人稱它們為作業環境 ( operating environment ),意思是它們比一般應用程式稍微高階,但又比作業系統 ( operating system ) 稍微低階一點。

Windows 1.0、2.0 是 16 位元的作業環境,在真實模式下執行,只能使用到 1MB 的記憶體,因此無法製作精美的畫面,以及強大的功能,所以市場銷售不好,沒有引起太大的迴響。Windows 1.0 上的視窗甚至不能疊在一起,數個視窗只能在螢幕上各據一方,而不能把一個視窗疊在另一個視窗之上;雖然 Windows 2.0 改進了這個缺點,但仍受限於記憶體容量,無法執行太大的程式,所以銷售也不好,也沒引起太多迴響。直到民國 77 年 ( 西元 1988 年 ),微軟發行 Windows 2.1,它有兩種版本,Windows/286 和 Windows/386。前者能使用 80286 的特性,把 DOS 核心放在 HMA 堙A可以增加少許記憶體。Windows/386 能使用 80386 的特性,使自己進入保護模式,可以使用超過 1MB 的記憶體,也能利用 Windows 3.0 的多工特性,使好幾個 MS-DOS 同時執行。

微軟承續 Windows/386 的開發經驗,於民國 79 年 ( 西元 1990年 ),微軟發行 Windows 3.0,這一版的 Windows 非常成功。改進 Windows 自身能力,包含利用虛擬記憶體,進入保護模式後,可以使用 16MB 的記憶體。那時記憶體不像現在這樣便宜,大部分的電腦沒有安裝 16MB 的實體記憶體,即使這樣,Windows 3.0 也能以硬碟當成虛擬記憶體,可以使用的總記憶體達 16MB。再加上那時候個人電腦的 VGA 顯示卡發展到一定水準,使畫面看起來比以前細緻許多,Windows 3.0 又引進 TrueType 字型,能使字型放大卻不產生鋸齒化。綜合上面因素,使得 Windows 3.0 大賣,奠定了 Windows 的江山霸業。又過了兩年,微軟推出 Windows 3.1,新增多媒體和網際網路功能。請參考右邊圖片,那是 Windows 的發展簡史。民國 84 年 ( 西元 1993 年 ) 微軟發行 Windows 3.11,這一版的 Windows 沒有新增什麼重要的功能,但改進了 3.0 版的一些錯誤。

值得一提的是,微軟為了能讓 Windows 3.1 能夠執行 32 位元的應用程式,所以製作了一個稱為 Win32s 的軟體,只要安裝了這個軟體,就會在 Windows 3.1 堨[入了 Win32 API。但是因為 Windows 3.1 本身沒有執行緒的觀念,因此有關這部份的 API 就無法支援,除此之外還有像非同步 I/O、新的序列埠副程式、部份 GDI API 等也沒有實作出來,因此才被稱為 Win32s,最後的「s」就是子集 ( subset ) 的意思。

近代電腦的 CPU 速度很快,即使零點幾個毫秒,也能執行數百萬條指令,作業系統每隔很短的時間,就使 CPU 把當前執行狀態存起來,然後切換到另一個程式執行;再隔一段很短時間,又把這個程式的狀態存起來,再切換另一個程式。因為每次執行某個程式的時間很短,就切換到下個程式,使用者感覺不出來,好像電腦只有一個 CPU,卻能「同時」執行很多程式,這就是多工的真面目。但是 Windows 3.1 卻沒有能力強制使 CPU 切換程式,假使某個程式佔住了 CPU,除非它願意放出來,不然別的程式別想執行。所以像 Windows 3.1 這樣的作業環境,如果要達到多工的目的,得靠所有程式間彼此合作,不用 CPU 的時候,就把它放出來,不能死佔著不放。只要有一個程式不釋放 CPU 時間,很容易當機。像這種多工方式,稱為協同式多工 ( cooperative multitasking )。

另外,Windows 3.x 的記憶體管理方式,也有一些缺點。Windows 3.x 中,所有程式都在同一個位址空間中執行。於是任何程式都很容易讀取另一個程式的記憶體。更糟的是,程式還可以改變其他程式的記憶體內容。如果有個程式設計不良,把系統重要資料覆蓋掉,並隨意寫些垃圾進去,Windows 3.x 就只好對你說拜拜了,最後只能重新啟動。另外,在操作介面上,Windows 1.x∼3.x 沒有「開始」按鈕,使用者如果要執行某個程式,必須由「程式管理員」或「檔案管理員」中的項目堙A點選兩次滑鼠左鍵。

16 和 32 位元混合的 Windows 9x

Windows 3.1 後,微軟開發下一代的作業系統是以年份命名,稱為 Windows 95。原先計畫 Windows 95 完全是由 32 位元的程式碼製作的作業系統,引入隨插即用的功能、支援長檔名的 VFAT 檔案系統、具有新的使用者介面 ( 最重要的就是左下角的「開始」按鈕 )、不須依靠 MS-DOS 開機,直接進入圖形使用者介面、並採用優先權式多工 ( preemptive multitasking )。在優先權式多工之下,作業系統把 CPU 執行時間切割成許多份,每個程式的執行時間完全由系統來分配,當某個程式的時間用完了,系統就會把 CPU 分配給下一個程式。換句話說,沒有程式能獨佔 CPU 時間。Windows 95 的記憶體管理方式也比 Windows 3.1 優良。Windows 95 應用程式在保護模式執行,擁有 32 位元定址和使用虛擬記憶體的能力,可使用多達 2G 虛擬記憶體,而且擁有自己的定址空間。擁有自己的定址空間的意思是,程式只能存取自己記憶體的內容,無法讀取,也無法存入別的程式的記憶體,因此理論上比 Windows 3.1 更加穩定,較不易當機。

上述理想雖好,但是 Windows 95 為了與 DOS/Windows 3.1 的相容性,並且急著上市而趕工 ( 因為那時,競爭對手,IBM 的 OS/2 Warp 已經在 1994 年 10 月上市,比 Windows 95 早十個月 ),微軟沒有把所有程式碼改寫為 32 位元,部份仍是 16 位元。Windows 95 在同一記憶體區段混合存放的 16 位元程式碼與 32 位元程式碼,易導致一個程式發生錯誤就會連帶造成整個系統崩潰的問題。這就是著名的藍色當機畫面。Windows 95 共有五種版本:

其中 OSR2、OSR2.1 和 OSR2.5 並沒有對公眾發行,而是給與廠商預先安裝在電腦上。

微軟研發的腳步,並沒有因此而停止。西元1998年6月25,微軟發售 Windows 98,這版本的 Windows 支援 AGP 圖形界面、FAT32 檔案系統,並且整合 Internet Explorer 4.0。在記憶體管理方面,把 16 位元與 32 位元程式碼放在不同記憶體區段執行,一旦某一應用程式發生錯誤,可以單獨關閉該程式,不影響整個系統持續正常的運作。事實上,Windows 98 有兩個版本,於西元 1999 年發售第二個版本,稱為 Windows 98 SE 第二版 ( Windows 98 Second Edition ),最重要的改良是 Internet Explorer 5.0、支援 DVD-ROM 和 USB。

西元 2000 年九月,微軟推出新版的 Windows,稱為 Windows Me,Me 的意思是 Millennium Edition,即千禧年之意。它是 16 位元和 32 位元混合的最後一個 Windows 系統,其核心仍是承襲了 Windows 95,和 Windows 98 SE 比較,並沒有明顯的進步,甚至大多數的使用者還認為 Windows Me 比 Windows 98 SE 還糟糕,當時甚至有些人寧願裝 98 SE 而不裝 Me。Windows Me 所附的程式有 Internet Explorer 5.5、Windows Media Player 7、Movie Maker 1.0 等軟體。

新技術的 Windows NT

Windows NT 3.x

西元 1986 年,微軟老闆比爾蓋茲和首席技術官 Nathan Myhrvold 認為有兩項技術會危及微軟的霸業,它們是跨平台軟體 ( 可在不同電腦平台,如 Unix、MacOS 上執行的軟體 ) 和精簡指令集處理器 ( RISC )。於是微軟和 IBM 共同研製下一代的作業系統,稱為 OS/2,分別稱為微軟的 Microsoft OS/2 NT 與 IBM 的 IBM OS/2 ( 這種情形好像在民國 70 年時,IBM 要發展自己的個人電腦時,也和微軟同時發展 DOS 作業系統,分別是微軟的 MS-DOS 與 IBM 的 PC-DOS )。

西元 1988 年,微軟起用從迪吉多 ( Digital Equipment Corporation ) 挖角來的戴維.卡特勒 ( Dave Cutler ) 主持開發 Microsoft OS/2 NT,這堛滿uNT」代表新技術 ( New Technology ) 的意思。Microsoft OS/2 NT 被設計為可以移植到不同的處理器平台,支援多處理器,能夠連接網路,並且讓使用者具有不同的權限,能夠審核與安全相關事件的作業系統。微軟和 IBM 都希望推出一個能吸引企業界使用的作業系統,甚至瓜分 Unix 市場。

但是西元 1990 年,微軟發售的 Windows 3.x 非常成功,微軟怕資源分散到兩種不同的作業系統,原先開發 OS/2 NT 的團隊則把 Windows 3.x 的 API 改寫成 32 位元,這就是後來的 Win32 API。但那時候 IBM 還未獲知 NT OS/2 已轉變成 Windows NT,直到 1991 年 1 月,IBM 獲悉了微軟的 Windows NT 計劃,就立即結束了與微軟的 OS/2 夥伴關係,和微軟分道揚鑣。然後 IBM 獨立開發 OS/2,後來發表了OS/2 2.0、OS/2 2.1、OS/2 3.0 Warp、OS/2 4.0 Merlin。

一開始,Windows NT 的前身,OS/2 NT,就是一個重新設計,純 32 位元的作業系統,實做了完整的 Win32 API,包含了以萬國碼為內碼、多執行緒、保密機制、較優秀的 NTFS 檔案系統、支援多處理器且不限定英特爾的處理器。由此看來,其穩定性比 Windows 95/98/98 SE/Me 好得多,功能更強大,當然硬體需求也比較高。

Windows NT 的第一個版本民國 82 年 ( 西元 1993 年 ) 發售的 3.1 版。之所以取 3.1 版是因為 Windows NT 比 Windows 3.1 晚發售,微軟怕消費者誤認為 Windows NT 1.0 是比 Windows 3.1 落後的系統,所以稱為 Windows NT 3.1 而不叫 Windows NT 1.0。之後又推出了 NT 3.5、NT 3.51,這三個版本的 Windows NT 所使用介面與 Windows 3.1 相同,但只有外表相似,骨子堿O完全不同的。Windows NT 3.1 分成兩個版本:工作站版 ( Workstation ) 和進階伺服器版 ( Advanced Server ),前者功能較弱,後者較強。而 Windows NT 3.5、3.51 則分成而工作站版 ( Workstation ) 和伺服器版 ( Server )。這三種 Windows NT 作業系統比 Windos 9x 系統穩定得多,幾乎不會當機,故多用於工作站或伺服器等級的電腦;對大眾影音娛樂或遊戲方面的支援,卻不甚理想。

Windows NT 4.0

民國 85 年 ( 西元 1996 年 ),微軟發售 Windows NT 4.0,在介面上,新增了「開始」按鈕,和 Windows 95/98 相同,新增了 IIS ( Internet Information Server ),提供數項非常實用的網際網路服務。此外,NT 4.0 對於 TCP/IP 的支援度較高,可提供 DNS 與 IP 路由的服務。NT 4.0 有五種版本:
   ① Windows NT Server 4.0 ( 伺服器版 ),以小規模企業的需要為設計原則的伺服器系統。
   ② Windows NT Server 4.0, Enterprise Edition ( 企業伺服器版 ),發行於 1997 年,被設計在高使用率,高流量的網路中運作。
   ③ Windows NT Server 4.0, Terminal Server Edition ( 終端伺服器版 ),發行於1998年,允許使用者遠端登入。
   ④ Windows NT Workstation 4.0 ( 工作站版 ),針對一般商業使用的桌上型作業系統。以穩定的純32位元作業環境為宣傳,快速的在目標市場中獲得成功地位。
   ⑤ Windows NT Embedded 4.0 ( 嵌入版 ),針對特定裝置,例如自動提款機而設計的小型系統。

Windows 2000

民國 89 年 ( 西元 2000 年 ),微軟發售 Windows 2000,它有四種版本:
   ① Windows 2000 Professional ( 專業版 ),其前身是 Windows NT 4.0 工作站版,適合個人或家庭使用,後來發展成 Windows XP。
   ② Windows 2000 Server ( 伺服器版 ),其前身是 Windows NT 4.0 伺服器版,用於中小型企業內部網路的伺服器,也可以應付企業、公司及大型網路中的各種應用程式的需要。
   ③ Windows 2000 Advanced Server ( 進階伺服器版 ),其前身是 Windows NT 4.0 企業伺服器版,功能比 Windows 2000 伺服器版更為強大。
   ④ Windows 2000 Datacenter Server ( 資料中心版 ),可用於大型資料庫、經濟分析、科學計算以及工程模擬等方面,是 Windows 200 功能最強的版本。
到了民國 90 年 ( 西元 2001 年 ),英特爾開發行了第一批稱為 IA-64 架構 ( Intel Architecture - 64 ) 的 64 位元處理器安騰 ( Itanium ),因此微軟也為這顆 64 位元的處理器開發專用的 Windows 2000 進階伺服器版和 Windows 2000 資料中心版,分別稱為「Windows 2000 Advanced Server Limited Edition」和「Windows 2000 Datacenter Server Limited Edition」,不過功能上有些限制。雖然每個版本有不同的市場目標,但是所有版本都使用相同的核心功能。與 Windows NT 3.x、4.x 比起來,新增的功能有使用 NTFS 3.0、支援更多的語言與地區、允許在同一個 Windows 2000 安裝中使用多種語言、加密檔案系統、Active Directory 等。

Windows XP、Windows Server 2003、Windows Server 2003 R2

Windows 9x/Me 和 Windows NT 都使用 Win32 API 作為程式介面,微軟一直想嘗試結合這兩個系統。一直到民國 90 年 ( 西元 2001 年 ),微軟發行的 Windows XP 才順利整合這兩個系統,XP 是體驗 ( experience ) 的意思。最早 XP 只發行下面的前三種版本,後幾年才又發行了其他版本:
   ① 專業版 ( Windows XP Professional Edition ),為高階玩家設計
   ② 家用版 ( Windows XP Home Edition ),為家庭用戶設計
   ③ Windows XP 64-bit Edition,為安騰處理器 ( Itanium CPU,是英特爾 IA-64 架構的處理器 ) 撰寫的 64 位元版本。
   ④ Windows XP Professional x64,在民國 94 年發行,為 x64 架構處理器所設計。
   ⑤ 媒體中心版 ( Windows XP Media Center Edition ),為家用多媒體設計的版本,必須和惠普 Media Center 等機器搭配銷售,否則視為盜版。
   ⑥ 平板電腦版 ( Windows XP Tablet PC Edition ),為平板電腦設計的版本,民國 91 年發行。
   ⑦ 簡易版 ( Windows XP Starter Edition ),功能最差,限制很多。
   ⑧ Windows XP Embedded,這是針對消費性電子產品、機上盒、自動提款機等所推出的版本。
   ⑨ Windows Fundamentals for Legacy PCs,此為 Windows XP Embedded 的精簡版,是針對老舊的機器而設計的。
其中的第③是微軟為了安騰所撰寫的 Windows XP 64-bit Edition,它是 64 位元的作業系統功能本應更強,但當時應用軟體幾乎都是 32 位元,而安騰處理器與原來 32 位元的軟體無法相容,並且模擬的效率又很差,因此銷售不佳,連帶使 Windows 64-bit Edition 也很短命。民國 92 年,安騰處理器的競爭者,超微所主導的 AMD-64 架構 ( 現稱 x64 架構 ) 處理器發售,它能以正常速度執行 32 位元程式,又是 64 位元的 CPU,因此後來居上,微軟也見風轉舵,為其撰寫 Windows XP Professional x64。媒體中心版和平板電腦版都在民國 93 年發售,要搭配特別廠商的電腦販售,沒法在零售市場買到,這兩種 XP 都是在專業版上面再添加新的應用程式,以配合特殊的電腦或平板。Windows XP 簡易版發行於東南亞,為配合當地物價,微軟限制了一些功能,故價格低廉,在中華民國不販售。

因為 Windows XP 穩定,功能強大,操作容易,成為歷史上使用人數最多的作業系統,稱霸個人電腦的作業系統約十年。小木偶使用它約五、六年,極少當機,是很穩定的系統。可惜的是,安裝久了之後,隨著安裝軟體變多,速度會越來越慢,最後也只能重新安裝系統。

大約這時候起,微軟的生產線變得很簡單,一是為個人或家庭用途所設計的客戶端作業系統;另一個是企業或大型資料庫所設計的伺服器系統。前者依發售年份分別是 Windows XP、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 10;而後者則是 Windows Server 2003、Windows Server 2003 R2、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012、Windows Server 2012 R2、Windows Server 2016。與 Windows XP 對應的伺服器作業系統是 Windows Server 2003,它是民國 92 年推出的,與 Windows 2000 伺服器版相比,做了很多改進,例如 Active Directory、改良的群組原則操作和管理、磁碟管理 ( 可以從 Shadow Copy 中備份檔案 )、改良的指令碼和命令列工具、支援「看門狗定時器」。它有四種版本:
   ① Web 版 ( Windows Server 2003 Web Edition )
   ② 標準版 ( Windows Server 2003 Standard Edition )
   ③ 企業版 ( Windows Server 2003 Enterprise Edition )
   ④ 資料中心版 ( Windows Server 2003 Datacenter Edition )。
後來的幾年間,微軟又發售 Windows Server 2003 的衍生版本,它們是
   ⑤ 運算叢集伺服器版 ( Windows Compute Cluster Server 2003 ,用於大量高階運算的伺服器 )
   ⑥ 小型商用伺服器版 ( Windows Small Business Server 2003,包含小型企業解決方案的套裝軟體 )
   ⑦ 儲存伺服器版 ( Windows Storage Server 2003,可做為 NAS 的作業系統 )
   ⑧ 家用伺服器版 ( Windows Home Server 2003 做為家用伺服器,解決家中數台電腦之連結、提供檔案分享、印表機伺服器、遠端存取 )
   ⑨ 嵌入系統版 ( Windows Server 2003 for Embedded Systems,用於建立防火牆、快取伺服器等 )。

民國 94 年 ( 西元 2005 年 ),微軟發售 Windows Server 2003 的改良版,稱為 Windows Servers R2。它其實是由兩片 CD-ROM 組成,第一片是 Windows Server 2003 SP1,第二片是「Microsoft Plus!」,換句話說,您得先安裝好 Windows Server 2003 SP1,再由第二片光碟安裝所需軟體。但是並不是所有的 Windows Server 2003 版本都能升級到 R2,只有 Windows Server 2003 標準版、Windows Server 2003 企業版、Windows Server 2003 資料中心版才能升級到 R2。新增的特色有 UNIX 的附加應用實用程序和開發工具、虛擬伺服器、分支辦事處伺服器管理等。Windows Server 2003 R2 的繼任者是 Windows Server 2008,它也只有三種版本:
   ① 標準版 ( Windows Server 2003 R2 Standard Edition )
   ② 企業版 ( Windows Server 2003 R2 Enterprise Edition )
   ③ 資料中心版 ( Windows Server 2003 R2 Datacenter Edition )。
Windows Server 2003 R2 的繼任者是 Windows Server 2008。

Windows Vista 與 Windows Server 2008

在 Windows XP 發售後五年,微軟才又再發行新的作業系統,稱為 Windows Vista,這是相隔時間最久的一次。小木偶私下猜測,可能是 XP 太成功了,以致要超越它,並不容易。即使如此,微軟還是在民國 95 年 ( 西元 2006 年 ) 開發完成。Windows Vista 最主要的新功能有稱為「Windows Aero」的視覺風格、加強搜尋功能 ( Windows indexing service )、改良安全性問題 ( 像安全漏洞、緩衝區溢位等,另外也透過使用者帳戶控制 ( 也就是 UAC ),限制應用軟體而改進 Windows Vista 的安全性 )、內建 DVD 燒錄程式 ( 讓使用者自行編輯圖片、影片燒錄至 DVD )、正體中文版增加新字形「微軟正黑體」、利用 ReadyBoost 增加快閃記憶體的讀寫速度、支援 IPv6 等,算是新增功能最多的一次改版,大概可以媲美 Windows 3.1 進步到 Windows 95。Windows Vista 有以下六種版本:

Windows Vista Starter ( 簡易版 )只新興市場發售,在中華民國沒有零售。這版也沒有「Windows Aero」的視覺風格,而且有諸多限制,例如只能同時執行三個程式。
Windows Vista Home Basic
( 家用入門版 )
基於 Windows XP Home Edition 改良而來,適用於不須高階數位視聽享受的家庭用戶使用,例如雖然包含 Windows Movie Maker,但並不能編輯高畫質影片。
Windows Vista Home Premium
( 家用進階版 )
基於 Windows XP Media Center Edition 改良而來,家用進階版包含家用入門版的所有功能,再加上支援 Tablet PC、網路投影機、觸摸螢幕等裝置。
Windows Vista Business ( 商用版 )在中華民國的媒體稱為商用入門版 ( 但小木偶不太確定 ),是基於 Windows XP 專業版改進的,為中小型商業用戶而設計的。包含了家庭進階版的大多數功能,但沒有 Windows Media Center、家長控制、Windows DVD 製作程式和 Movie Maker HD。
Windows Vista Enterprise ( 企業版 )在中華民國的媒體稱為商用進階版 ( Business Premium ),針對大型企業市場而設計,包含許多進階的商用功能。
Windows Vista Ultimate ( 旗艦版 )集合了以上版本的所有功能。

除了簡易版只有 32 位元版本,其餘五種 Windows Vista 都分為 32 位元的 x86 版和 64 位元的 x64 版兩種版本。在 Windows Vista x64 系統堙A利用 WOW64 ( Windows 32-bit on Windows 64-bit ) 子系統執行 32 位元的程式碼,這樣 64 位元版的 Windows 才能執行 32 位元和 64 位元兩種程式碼。事實上,64 位元的 Windows XP Professional x64 也是以同樣的方式,才能執行 32 位元和 64 位元兩種應用程式。

雖然微軟野心勃勃,想要把 Windows Vista 做到最好,功能最強,但卻忽略了現實的情形,以致讓 Windows Vista 銷售其差無比。Windows Vista 華麗的「Windows Aero」的視覺風格降低了效率,這是在設計時沒有考慮到當時許多處理器不給力、記憶體不足;為了安全性,當使用者在安裝或移除程式、安裝驅動程式、將檔案移動或複製到〝Program Files〞或 Windows 目錄等操作都會跳出一對話盒,等待使用者授權允許,這引起使用者的反感;當使用者把檔案傳送到網路上或遠端電腦上時,Windows Vista 會先檢查兩地檔案的差異,只傳送有改變的部份過去就能增進網路傳輸速率,但它卻也在本機上也會啟動這個技術,以致在本機上拷貝檔案,也慢如老牛拖車。也因為以上重大缺失,使得 Windows Vista 佔有率很低。

與 Windows Vista 對應的伺服器是 Windows Server 2008。Windows Server 2008 於民國 97 年 ( 西元 2008 年 ) 發售,其核心編碼與 Windows Vista 一樣。當中最引人注意的地方是它嶄新的安裝與使用方式,它在安裝時,可以讓管理員選擇安裝整個伺服器軟體,或是只安裝「伺服器核心」 ( Server Core )。如果選用「伺服器核心」,就沒有使用者圖形介面,所有的設定與維護全都是由命令列界面中輸入指令控制 ( 這是反璞歸真?),或者是利用 Microsoft Management Console 由遠端連線控制。Windows Server 2008 有以下版本:
   ① Windows Server 2008 Standard Edition ( 標準版 )
   ② Windows Server 2008 Enterprise Edition ( 企業版 )
   ③ Windows Server 2008 Datacenter Edition ( 資料中心版 )
   ④ Windows HPC Server 2008 ( 高效能運算伺服器版 )
   ⑤ Windows Web Server 2008 ( 網路伺服器版 )
   ⑥ Windows Storage Server 2008 ( 儲存中心版 )
   ⑦ Windows Small Business Server 2008 (Codenamed "Cougar") (x64) for small businesses
   ⑧ Windows Essential Business Server 2008 (Codenamed "Centro") (x64) for medium-sized businesses
   ⑨ Windows Server 2008 for Itanium-based Systems
Windows Server 2008 是微軟所發行的 Windows Server 最後一版還支援 32 位元 CPU。

Windows 7 與 Windows Server 2008 R2

微軟於民國 98 年 ( 西元 2009 年 ) 發售 Windows 7,在前一年其執行長說過『Windows 7 是 Windows Vista 的「改良版」』,這暗示 Windows 7 的核心仍和 Windows Vista 相似,它的版本不是 7.0,而是 6.1。即使如此,它仍然改良一些 Windows Vista 的功能,它支援觸控螢幕和提高手寫辨識率、提供一套全新的網路 API、對 UAC 進行改良、支援固態硬碟等等。Windows 7 有以下版本:

Windows 7 Starter ( 簡易版 )不單獨販售,搭配小筆電隨機出貨。
Windows 7 Home Basic ( 家用入門版 ) 只在阿根廷、巴西等新興市場出售,這個版本主要是針對中、低階用途的個人或家用電腦所設計,相當於 Windows Vista 的家用入門版,沒有 Windows Aero 功能。
Windows 7 Home Premium ( 家用進階版 ) 針對家用主流電腦市場設計,包含 Windows Aero、Windows Media Center 媒體中心和觸控螢幕的功能。
Windows 7 Professional ( 專業版 ) 相當於 Windows Vista 商用版,針對電腦玩家及中小企業使用者設計,包含遠端桌面伺服器、位置辨識列印、加密的檔案系統等功能。
Windows 7 Enterprise ( 企業版 )為企業使用者設計,沒有透過零售販賣。
Windows 7 Ultimate ( 旗艦版 ) 與企業版的功能幾乎完全相同,但是提供授權給一般的使用者。

上面的這些版本,簡易版只有 32 位元版本,其餘的都有 32 位元和 64 位元兩種版本。另外在中華民國零售的只有家用進階版、專業版和旗艦版三種。

與 Windows 7 具有相同核心的伺服器版本是 Windows Server 2008 R2,它是重新開發的系統,雖然名稱和 Windows Server 2008 很相似,但只有這點相像,核心程式碼卻是大不同。這一點和 Windows Server 2003 R2 是由 Windows Server 2003 再加上附屬工具組成的,大不相同。Windows Server 2008 R2 是民國 98 年 ( 西元 2009 年 ) 發行,有以下版本:
   ① Windows Server 2008 R2 Foundation ( )
   ② Windows Server 2008 R2 Standard ( 標準版 )
   ③ Windows Server 2008 R2 Web ( 網路伺服器版 )
   ④ Windows Server 2008 R2 HPC ( 高效能運算伺服器版 )
   ⑤ Windows Server 2008 R2 Enterprise ( 企業版 )
   ⑥ Windows Server 2008 R2 Datacenter ( 資料中心版 )
   ⑦ Windows Server 2008 R2 Itanium ( Itanium 版 )

Windows 8 與 Windows Server 2012

民國 101 年 ( 西元 2012 年 ),微軟再度推出新的作業系統,Windows 8。在那幾年堙A智慧型手機與平板電腦的銷售量快速成長,許多人認為個人電腦已逐漸顯露疲態。微軟見到市場趨勢,也想效法智慧型手機作業系統的做法,對觸控螢幕支援更加完善,另外改變原來的介面變成 Metro 風格的介面。不過卻忘記了,許多使用者桌上型電腦的螢幕並非觸控螢幕,結果使得 Windows 8 的使用者介面改變太大,尤其是取消「開始」按鈕,造成大部分使用者抱怨連連,以致成為 Windows 系統中最短壽命的作業系統。Windows 8 可以分為四種版本:
   ① Windows 8 Standard ( 標準版 )
   ② Windows Windows 8 Professional ( 專業版 )
   ③ Windows Windows 8 Enterprise ( 企業版 )
   ④ Windows Windows RT ( ARM 版 )
Windows 8 的標準版、專業版、企業版都可分為 32 位元的 x86 版和 64 位元的 x64 版兩種版本。ARM 版則支援 ARM 架構處理器的系統。

與 Windows 8 對應的伺服器是 Windows Server 2012,它是第五個 Windows Server,於西元 2012 年發售。Windows Server 2012 僅支援 x64 處理器,已不支援 IA-32 或 IA-64 安騰處理器。可分為四種版本:
   ① Windows Server 2012 Foundation ( 基礎版 )
   ② Windows Server 2012 Essentials ( 精華版 )
   ③ Windows Server 2012 Standard ( 標準版 )
   ④ Windows Server 2012 Datacenter ( 資料中心版 )
原先 Windows Server 2008 R2 企業版消失,由資料中心版取代。Windows Server 2012 的使用者介面和 Windows 8 一樣,都採用 Metro 風格,這種介面是由許多應用程式為一小的圖示,稱為應用程式磚,在螢幕桌面上排成一列一列的,供使用者點選執行。另外螢幕邊緣稱為熱點,當滑鼠移到這些區域時,也會出現對應的選單,供使用者顯選。這些設計,可能很貼心,但終究違反使用者長久以來的習慣,一年之後,微軟就推出新版的作業系統救急。

Windows 8.1 與 Windows Server 2012 R2

民國 102 年 ( 西元 2013 年 ),紛紛推出改良的 Windows 8.1 與 Windows Server 2012 R2。Windows 8.1 與 Windows Server 2012 R2 恢復了「開始按鈕」,並且與「Metro 風格」介面並用,使用者可以在這兩者之間切換。Windows 8.1 可分為四個版本:
   ① Windows RT 8.1:僅預先安裝在 ARM 架構的系統中。
   ② Windows 8.1
   ③ Windows 8.1 Professional ( 專業版 )
   ④ Windows 8.1 Enterprise ( 企業版 )
與 Windows 8.1 對應的伺服器是 Windows Server 2012 R2,發行於民國 102 年 ( 西元 2013 年 ),分為四個版本:
   ① Windows Server 2012 R2 Foundation ( 基礎版 )
   ② Windows Server 2012 R2 Essentials ( 精華版 )
   ③ Windows Server 2012 R2 Standard ( 標準版 )
   ④ Windows Server 2012 R2 Datacenter ( 資料中心版 )

Windows 10 與 Windows Server 2016

微軟的下一代作業系統是 Windows 10,而不是 Windows 9,有人說微軟怕使用者把新的作業系統和 Windows 95/98 搞混,故取名為 Windows 10。它有七個版本:

版本說  明
①Windows 10 Home ( 家用版 )這是針對普通消費者的 Windows 10 桌機版,也就是現在已經在很多人電腦中安裝的Windows 10測試版,將會內建有 Cortana 語音助手、接替IE的下一代 Microsoft Edge 瀏覽器、Windows Hello 臉部生物辨識技術、 Xbox 社群與遊戲串流服務。
②Windows 10 Mobile ( 行動版 )基本上就是以前的 Windows Phone 和 Windows RT 兩者合併起來的系統,主要適用的裝置為智慧手機以及小尺寸的平板。而且這個版本支援桌機版Windows 10的 Universal App 通執行,還具備有 Continuum for Phones 的特性,可以接上滑鼠、鍵盤以及大螢幕,可以將手機變成桌機來使用,而且在手機與螢幕上呈現不同的畫面。
③Windows 10 Pro ( 專業版 )這是以 Windows 10 Home 版本為基礎,加入了符合小型企業需求的功能。在資料保護上做到更多的最佳化,以及透過雲端技術來實現遠端工作的需求,並且支援Windows Update for Business。
④Windows 10 Enterprise ( 企業版 )以 Windows 10 Pro 版本為基礎,更進一步加入中大型企業所需要的功能。在系統、裝置和應用程式部署這些方面提供更大的便利性。採用大範圍授權的企業使用這個版本,企業的管理員可以使用 Windows Update for Business 管理後續更新,也可以將重要的裝置或環境加入 Long Term Servicing Branch。
⑤Windows 10 Education ( 教育版 )以 Windows 10 Enterprise 版本為基礎,不過是專門針對學校的員工、管理員、教師和學生來發送,主要是提供給學校透過大範圍授權的使用者。
⑥Windows 10 Mobile Enterprise
 ( 行動企業版 )
提供給企業使用者,使用在手機、小尺寸平板上使用的系統版本。一樣是用在大範圍授權的企業用戶,在原本的 Windows 10 Mobile 版本上,加入了工作生產力工具、安全以及行動裝置的管理功能,而企業管理員可以統一發佈更新。
比較特別的是,一般 ATM、手持終端設備、工業機器人等嵌入式裝置使用的系統,也屬於 Windows 10 Mobile Enterprise 的分支。
⑦Windows 10 IoT Core
 ( 物聯網核心版 )
這是提供給供路由器等小尺寸、低售價的智慧硬體裝置,也就是物聯網版本的系統。
微軟企圖統一個人電腦、平板電腦、智慧型手機、嵌入式系統、Xbox One 等平台,只用一套 Windows 10 就能搞定,但是看起來似乎還很困難,看倌只要看上面的表格就知道,Windows 10 還分這麼多種版本,要一統天下,何其不易。微軟為 Windows 10 設計了新的開始功能表、引入了一個虛擬桌面、一個稱為工作檢視的工作切換器、新的瀏覽器 Microsoft Edge、支援指紋和面部、虹膜辨識登入、企業環境的新安全功能、DirectX 12 和 WDDM 2.0,以提高作業系統的遊戲圖形功能。民國 104 年 ( 西元 2015 年 5 月 ),在微軟高層主管透露,Windows 10 是 Windows 作業系統的最後一版產品,Windows 不再有新版本問世,取而代之的將是定期的改進和更新。

與 Windows 10 對應的伺服器版本是 Windows Server 2016,有三種版本:
   ① Windows Server 2016 Essentials ( 精華版 )
   ② Windows Server 2016 Standard ( 標準版 )
   ③ Windows Server 2016 Datacenter ( 資料中心版 )

結語

上面寫了這麼多 Windows 的版本,看起來真是像老太婆的裹腳布,又臭又長。如果要簡單的分類,Windows 大致可以分成三類:

在結語最後,小木偶要感謝全球資訊網的發明人,提姆.柏內茲-李 ( Tim Berners-Lee ).因為有了全球資訊網,要查任何資料幾乎易如反掌。上面這段「Windows 簡史」的資料,也都是在全球資訊網上查得的。另外,Windows 版本真的很複雜,因此還有許多地方,小木偶也搞不太清楚,例如微軟曾發售一款 Windows Home Server 作業系統,雖然可以在「topcat 姍舞之間的極度凝聚」網站閱讀其簡介,但小木偶還是不知道它應該屬於哪一類,不幸的是,在民國 101 年,微軟計畫停止 Windows Home Server 的開發,因此它不會有新版本問世,而以 Windows Server 2012 Essentials 取代 Windows Home Server。


原理

底下小木偶想撰寫一個程式,WinVer.ASM,它能顯示 Windows 作業系統屬於哪一個版本、產品類型、32 位元或 64 位元以及建組編號 ( Build )。要達成上述目的,必須呼叫三個 Win32 API 以及存取登錄表。這三個 Win32 API 分別是:

  1. GetVersionEx:可以取得 Windows 版本,像是 Windows 9x、XP、Vista 等資料。GetVersionEx 也可以取得建組編號和 Service Pack。
  2. GetProductInfo:可以取得 Windows 的產品類型,產品類型像是 Windows 7 有分 家用進階版、專業版、旗艦版等等不同的類型。
  3. GetNativeSystemInfo:可以獲得作業系統是幾位元,32 或 64 位元。

GetVersionEx API

要取得 Windows 的版本,首推呼叫 GetVersionEx API,其原型為:

GetVersionEx    PROTO   lposvi:LPSTR

GetVersionEx 只有一個參數,指向一個位址,這個位址是 OSVERSIONINFO 或 OSVERSIONINFOEX 結構體所在之處。對個人用戶而言,OSVERSIONINFOEX 結構體是在 Windows 98 第二版或其後的版本才可以使用;對工作站或伺服器而言,OSVERSIONINFOEX 結構體是在 Windows NT 4.0 SP4 或其後的版本才出現。如果在 Windows 98、Windows NT 4.0 SP3 或比他們更早的系統,是不支援 OSVERSIONINFOEX 的,如果以其為參數呼叫 GetVersionEx,就會產生錯誤,返回值為 0。因此比 Windows 98 第二版或 Windows NT 4.0 SP4 更早的 Windows,只能使用 OSVERSION。仔細觀察這兩個結構體的欄位,您可以發覺,前六個欄位都是一樣的,OSVERSIONINFOEX 比 OSVERSIONINFO 多出後面 5 個欄位。底下的說明是使用 ASCII 字碼,如果是萬國碼,szCSDVersion 改成「szCSDVersion WORD 128 DUP (?)」。

OSVERSIONINFO           STRUC
dwOSVersionInfoSize     DWORD   ?
dwMajorVersion          DWORD   ?
dwMinorVersion          DWORD   ?
dwBuildNumber           DWORD   ?
dwPlatformId            DWORD   ?
szCSDVersion            BYTE    128 DUP (?)
OSVERSIONINFO           ENDS
OSVERSIONINFOEX         STRUCT
dwOSVersionInfoSize     DWORD   ?
dwMajorVersion          DWORD   ?
dwMinorVersion          DWORD   ?
dwBuildNumber           DWORD   ?
dwPlatformId            DWORD   ?
szCSDVersion            BYTE    128 DUP (?)
wServicePackMajor       WORD    ?
wServicePackMinor       WORD    ?
wSuiteMask              WORD    ?
wProductType            BYTE    ?
wReserved               BYTE    ?
OSVERSIONINFOEX         ENDS

第零個欄位,dwOSVersionInfoSize,是 OSVERSIONINFO 或 OSVERSIONINFOEX 結構體所佔位元組個數,必須在呼叫 GetVersionEx 之前就填好,系統藉此判斷要填入 OSVERSIONINFO 還是 OSVERSIONINFOEX 結構體;如果沒填好或不是結構體所佔位元組個數,就會產生錯誤。

接下來本應介紹 dwMajorVersion 和 dwMinorVersion 的兩個欄位,但是小木偶想先介紹 dwPlatformId 欄位。dwPlatformId 所代表的意義是這個作業系統是哪個平台,可能的數值有下列三種:

  1. VER_PLATFORM_WIN32s:表示 16 位元的作業系統,如 Windows 1.x/2.x/3.x。這 VER_PLATFORM_WIN32s 的 s 要小寫,表示子集之意,亦即只有安裝了 Win32s 的 Windows 3.x 才能呼叫 GetVersionEx。
  2. VER_PLATFORM_WIN32_WINDOWS:以 16、32 位元混搭的 Windows 95 為核心,其作業系統包含了 Windows 95/98/98 SE/Me,這些均為個人使用所設計。
  3. VER_PLATFORM_WIN32_NT:以 Windows NT 為核心的系統,包含個人或工作站使用的 Windows NT/XP/Vista/7/8.x/10 以及伺服器使用的 Windows NT/2000/Windows Server 2003/2003 R2/2008/2008 R2/2012/2012 R2/2016 等等。

由上面的說明得知,dwPlatformId 其實代表了不同時期的 Windows 架構,由 16 位元的 Windows 1.x/2.x/3.x 演進到 16、32 位元混合,以 Windows 95 為核心的作業系統,如 Windows 95/98/98 SE/Me,它們都是為個人使用而設計的。最後再進步變成純 32 位元的系統,他們都是以 NT 為核心,被設計成為個人使用的工作站和為多人使用的伺服器用途。

OSVERSIONINFO 結構體的第一個欄位是 dwMajorVersion,代表 Windows 的主要版本;第二個欄位是 dwMinorVersion,代表次要版本;第三個欄位是 dwBuildNumber,代表組建編號,NT 核心的組建標號與 Windows 95 核心的意義稍有不同。對前者而言,dwBuildNumber 是一雙字組,即組建編號;對後者而言,位址較低的字組為組件編號,位址較高的字組堛漣C位元組是次要版本,高位元組是主要版本。dwPlatformId、dwMajorVersion 和 dwMinorVersion 三者互相搭配,就大約能決定 Windows 版本,整理後得到表一:

表  一
dwPlatformId
數值
dwMajor
Version
dwMinor
Version
作業系統產品類型
VER_PLATFORM_WIN32s
0
30 Win32s on Windows 3.0
31Win32s on Windows 3.1
VER_PLATFORM_WIN32_WINDOWS
1
4 0Windows 95
40AhWindows 98/Windows 98 SE
45AhWindows Millennium Edition
VER_PLATFORM_WIN32_NT
2
31 Windows NT 3.1工作站版、伺服器版
35Windows NT 3.5 工作站版、伺服器版
351Windows NT 3.51 工作站版、伺服器版
40Windows NT 4.0 工作站版、伺服器版、伺服器商用版、終端伺服器版、嵌入版
50Windows 2000 專業版、伺服器版、進階伺服器版、資料中心伺服器版
51Windows XP 家用版、專業版、媒體中心版、平板電腦版
52Windows XP Professional x64 Edition
52Windows Server 2003 網路版、標準版、企業版、資料中心版、小型商用伺服器版、運算叢集伺服器版、儲存伺服器版、家用伺服器版、嵌入系統版
52Windows Server 2003 R2 標準版、企業版、資料中心版
60Windows Vista 簡易版、家用入門版、家用進階版、商業版、企業版、旗艦版
60Windows Server 2008 標準版、企業版、資料中心版、網路伺服器版、儲存中心版
61Windows Server 2008 R2
61Windows 7 簡易版、家用入門版、家用進階版、專業版、企業版、旗艦版
62Windows Server 2012
62Windows 8
63Windows Server 2012 R2
63Windows 8.1
100Windows Server 2016
100Windows 10 家用版、專業版、企業版、教育版、行動版、移動企業版、物聯網核心版

第五個欄位是 szCSDVersion,此欄位為一字串。對 Windows NT 為核心的系統而言,會顯示系統更新到哪一版,例如像「Service Pack 1」的資料,如果沒有更新,此字串為「0」。對 Windows 95 為核心的系統而言,dwBuildNumber 和 szCSDVersion 所代表的意義,與 Windows NT 為核心的系統有些不同,表二是一些相關的補充資料:

表  二
作業系統dwBuildNumber低字組的
dwBuildNumber
(十進位)
szCSDVersion在「系統內容」的
「一般」標籤頁面
KERNEL32.DLL
GDI32.DLL   三檔案日期
USER32.DLL
Windows 95 零售版或 OEMB6 03 00 0495000 4.00.9501995.7.11
Windows 95 SP1B6 03 00 0495061 00 4.00.950a1995.7.11∼1995.12.31
Windows 95 OSR 257 04 00 04 或 B6 03 00 041111 或 950 20 42 004.00.1111 或 4.00.950 B1996.8.24
Windows 95 OSR 2.1BC 04 00 04 ∼ BE 04 00 04 或
B6 03 00 04
1212∼1214 或 95020 42 00 4.03.1212∼1214 或 4.00.950 B1996.8.24∼1997.8.27
Windows 95 OSR 2.5BC 04 00 04 或 B6 03 00 041214 或 950 20 43 004.03.1214 或 4.00.950 C1996.8.24∼1997.11.18
Windows 98 零售版或 OEMCE 07 0A 041998 20 004.10.19981998.5.11
Windows 98 Security CDCE 07 0A 041998 20 41 20 004.10.1998 A
Windows 98 SEAE 08 0A 04222220 41 20 00 4.10.2222 A1999.4.23
Windows 98 SE Security CDAE 08 0A 042222 20 42 20 004.10.2222 B
Windows MeB8 0B 5A 04300020 00 4.90.30002000.6.8

上表中的 dwBuildNumber 和 szCSDVersion 均以記憶體內的數值表示。以 Windows 98 SE 為例,「AE 08」為記憶體內容,即十六進位的 08AE,換成十進位是 2222。szCSDVersion 為一個以 0 結尾的字串,「20 42 20 00」代表字串 " B "。在「系統內容」的「一般」標籤頁面的意思是指,當使用者把滑鼠游標移到我的電腦上,點選滑鼠右鍵,按「內容」→「一般」所見到的資料。

OSVERSIONINFO 的所有欄位都已介紹完畢,但是底下還有幾個欄位是屬於 OSVERSIONEX 的。首先是 wServicePackMajor、wServicePackMinor 這兩個欄位,分別系統安裝的 service pack 的主要版本和次要版本,它們的長度都是 16 位元,合起來是 32 位元。例如,如果您在 Windowx XP 安裝過 service pack 3,那麼 wServicePackMajor、wServicePackMinor 分別為 3、0。

下一個欄位是 wSuiteMask,表示安裝在系統中的軟體,此欄位長度是 16 位元,每個位元代表一種軟體,如下表三:

表  三
所代表位元數值說明
VER_SUITE_SMALLBUSINESS1曾經安裝過小型商用伺服器 ( Microsoft Small Business Server ),但也有可能已升級成其他版本。當安裝好型商用伺服器時,VER_SUITE_SMALLBUSINESS 和 VER_SUITE_SMALLBUSINESS_RESTRICTED 所代表位元都會設為 1,但是如果升級成 Windows Server 或標準版 ( Standard Edition ),VER_SUITE_SMALLBUSINESS_RESTRICTED 會被清除,而 VER_SUITE_SMALLBUSINESS 仍被設定。
VER_SUITE_ENTERPRISE2作業系統是 Windows 2000 Advanced Server、Windows Server 2003 Enterprise Edition 或 Windows Server 2008 Enterprise。
VER_SUITE_BACKOFFICE4有安裝 Microsoft BackOffice 軟體,這個位元跟獲取 Windows 的版本無關
VER_SUITE_COMMUNICATIONS8
VER_SUITE_TERMINAL10H已安裝終端機伺服器,此位元通常被設為「1」。如果 VER_SUITE_TERMINAL 為 1,但 VER_SUITE_SINGLEUSERTS 為 0,表示系統是應用程式伺服器 ( Application Server )
VER_SUITE_SMALLBUSINESS_RESTRICTED20H 已安裝微軟的大量授權且有限制的 Small Business Server 客戶端。請參考 VER_SUITE_SMALLBUSINESS。
VER_SUITE_EMBEDDEDNT40H Windows XP Embedded。
VER_SUITE_DATACENTER80H Windows 2000 Datacenter Server、Windows Server 2003 Datacenter 或 Windows Server 2008 Datacenter
VER_SUITE_SINGLEUSERTS100H 已安裝遠端桌面協定 ( Remote Desktop ) 讓使用者連上微軟遠端伺服器。
VER_SUITE_PERSONAL200H Windows XP 家用版、Windows Vista 家用入門版或 Windows Vista 家用進階版。
VER_SUITE_BLADE400HWindows Server 2003 Web Edition
VER_SUITE_EMBEDDED_RESTRICTED800H
VER_SUITE_SECURITY_APPLIANCE1000H
VER_SUITE_STORAGE_SERVER2000H Windows Storage Server 2003 或 Windows Storage Server 2003 R2。
VER_SUITE_COMPUTE_SERVER4000H Windows Server 2003 運算叢集伺服器版
VER_SUITE_WH_SERVER8000H Windows Home Server。

下一個欄位是 wProductType,它是一個 8 位元長的欄位,提供了系統的額外資料,如下表四:

表  四
wProductType數值說  明
VER_NT_WORKSTATION1作業系統可能是 Windows 2000 Professional、Windows XP Home Edition、Windows XP Professional、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 10
VER_NT_DOMAIN_CONTROLLER2此系統用於網域控制器 ( domain controller ),而其作業系統可能是 Windows 2000 Server、Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012、Windows Server 2012 R2、Windows Server 2016
VER_NT_SERVER3作業系統可能為 Windows 2000 Server、Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012、Windows Server 2012 R2、Windows Server 2016
如果此伺服器作為網域控制器的話,那麼會傳回 VER_NT_DOMAIN_CONTROLLER,而不是 VER_NT_SERVER

仔細觀察上表一,您應當能發現,dwMajorVersion、dwMinorVersion 為 6、0 的的系統也有兩種,6、1 的也有兩種…,那怎麼辦呢?原來就是靠表四中的 wProductType 來區分。像 Windows 7/Vista/8/8.1/10 這些個人使用的作業系統是 VER_NT_WORKSTATION;而像 Windows 2000 Server、Windows Server 2003/2008/2008 R2/2012/2012 R2/2016 等伺服器是 VER_NT_DOMAIN_CONTROLLER 或 VER_NT_SERVER。

GetProductInfo API

GetProductInfo API 是用來取得作業系統的產品類型。例如 Windows 10 有家用版、專業版、企業版等等,這些家用版、專業版、企業版…就稱為產品類型。GetProductInfo 的原型是:

GetProductInfo  PROTO   dwOSMajorVersion,dwOSMinorVersion,dwSpMajorVersion,dwSpMinorVersion,pdwReturnedProductType

在呼叫 GetProductInfo 前,必須把前四的參數填好,他們分別代表 Windows 的主要版本、次要版本、SP 的主要版本、SP 的次要版本,這四個參數可以由呼叫 GetVersionEx API 獲得。而這四個參數最小的值分別是 6、0、0、0,亦即只有 Windows Vista 或 Windows Server 2008 及其以後的作業系統才能呼叫這個 API,的確如此,因為之前的作業系統並沒有實作這個 API,因此無法使用。

最後一個參數,pdwReturnedProductType,是一個雙字組變數的位址,不可以是 0,會出錯的。呼叫前要把這個位址填好,呼叫後系統會把作業系統的產品類型填入此位址堙A這樣程式就可以用這個變數存取產品類型了。如果前四個參數所指定的作業系統版本比目前使用的舊,則 pdwReturnedProductType 的內容會是指定作業系統所對應且支援的類型;如果比最高支援的作業系統還新,則 pdwReturnedProductType 的內容會是當前作業系統所對應且支援的類型,例如您在 Windows 7 專業版堨 6、0、0、0 為參數呼叫 GetProductInfo,會返回 PRODUCT_BUSINESS,這是因為 Windows 7 專業版與 Windows Vista 商用版都是針對電腦玩家及中小企業使用者所設計的。如果您所引入的參數與您所用的作業系統相符,呼叫成功返回後,pdwReturnedProductType 所指位址的產品類型如下表:

pdwReturnedProductType 所指位址之內容
( 產品類型 )
數值說明
PRODUCT_UNDEFINED0hAn unknown product
PRODUCT_BUSINESS6hBusiness
PRODUCT_BUSINESS_N10hBusiness N
PRODUCT_HOME_BASIC2hHome Basic
PRODUCT_HOME_BASIC_N5hHome Basic N
PRODUCT_HOME_PREMIUM3hHome Premium
PRODUCT_HOME_PREMIUM_N1AhHome Premium N
PRODUCT_CLUSTER_SERVER12hHPC Edition
PRODUCT_HYPERV2AhMicrosoft Hyper-V Server
PRODUCT_STARTER_E42hNot supported
PRODUCT_HOME_BASIC_E43hNot supported
PRODUCT_HOME_PREMIUM_E44hNot supported
PRODUCT_PROFESSIONAL_E45hNot supported
PRODUCT_ULTIMATE_E47hNot supported
PRODUCT_PROFESSIONAL_WMC67hProfessional with Media Center
PRODUCT_DATACENTER_SERVER_CORE0ChServer Datacenter (core installation)
PRODUCT_DATACENTER_EVALUATION_SERVER50hServer Datacenter (evaluation installation)
PRODUCT_DATACENTER_SERVER8hServer Datacenter (full installation)
PRODUCT_DATACENTER_SERVER_CORE_V27hServer Datacenter without Hyper-V (core installation)
PRODUCT_DATACENTER_SERVER_V25hServer Datacenter without Hyper-V (full installation)
PRODUCT_ENTERPRISE_SERVER_CORE0EhServer Enterprise (core installation)
PRODUCT_ENTERPRISE_SERVER0AhServer Enterprise (full installation)
PRODUCT_ENTERPRISE_SERVER_IA640FhServer Enterprise for Itanium-based Systems
PRODUCT_ENTERPRISE_SERVER_CORE_V29hServer Enterprise without Hyper-V (core installation)
PRODUCT_ENTERPRISE_SERVER_V26hServer Enterprise without Hyper-V (full installation)
PRODUCT_SERVER_FOR_SB_SOLUTIONS33hServer For SB Solutions
PRODUCT_SB_SOLUTION_SERVER_EM36hServer For SB Solutions EM
PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM37hServer For SB Solutions EM
PRODUCT_SERVER_FOUNDATION21hServer Foundation
PRODUCT_CLUSTER_SERVER_V40hServer Hyper Core V
PRODUCT_STANDARD_SERVER_SOLUTIONS34hServer Solutions Premium
PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE35hServer Solutions Premium (core installation)
PRODUCT_STANDARD_SERVER7hServer Standard
PRODUCT_STANDARD_SERVER_CORE0DhServer Standard (core installation)
PRODUCT_STANDARD_EVALUATION_SERVER4FhServer Standard (evaluation installation)
PRODUCT_STANDARD_SERVER_V24hServer Standard without Hyper-V
PRODUCT_STANDARD_SERVER_CORE_V28hServer Standard without Hyper-V (core installation)
PRODUCT_SMALLBUSINESS_SERVER_PREMIUM19hSmall Business Server Premium
PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE3FhSmall Business Server Premium (core installation)
PRODUCT_STARTER0BhStarter
PRODUCT_STARTER_N2FhStarter N
PRODUCT_STORAGE_ENTERPRISE_SERVER17hStorage Server Enterprise
PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE2EhStorage Server Enterprise (core installation)
PRODUCT_STORAGE_EXPRESS_SERVER14hStorage Server Express
PRODUCT_STORAGE_EXPRESS_SERVER_CORE2BhStorage Server Express (core installation)
PRODUCT_STORAGE_STANDARD_SERVER15hStorage Server Standard
PRODUCT_STORAGE_STANDARD_SERVER_CORE2ChStorage Server Standard (core installation)
PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER60hStorage Server Standard (evaluation installation)
PRODUCT_STORAGE_WORKGROUP_SERVER16hStorage Server Workgroup
PRODUCT_STORAGE_WORKGROUP_SERVER_CORE2DhStorage Server Workgroup (core installation)
PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER5FhStorage Server Workgroup (evaluation installation)
PRODUCT_ULTIMATE1hUltimate
PRODUCT_ULTIMATE_N1ChUltimate N
PRODUCT_WEB_SERVER_CORE1DhWeb Server (core installation)
PRODUCT_WEB_SERVER11hWeb Server (full installation)
PRODUCT_EDUCATION79hWindows 10 Education
PRODUCT_EDUCATION_N7AhWindows 10 Education N
PRODUCT_ENTERPRISE4hWindows 10 Enterprise
PRODUCT_ENTERPRISE_S7DhWindows 10 Enterprise 2015 LTSB
PRODUCT_ENTERPRISE_S_EVALUATION81hWindows 10 Enterprise 2015 LTSB Evaluation
PRODUCT_ENTERPRISE_S_N7EhWindows 10 Enterprise 2015 LTSB N
PRODUCT_ENTERPRISE_S_N_EVALUATION82hWindows 10 Enterprise 2015 LTSB N Evaluation
PRODUCT_ENTERPRISE_E46hWindows 10 Enterprise E
PRODUCT_ENTERPRISE_EVALUATION48hWindows 10 Enterprise Evaluation
PRODUCT_ENTERPRISE_N1BhWindows 10 Enterprise N
PRODUCT_ENTERPRISE_N_EVALUATION54hWindows 10 Enterprise N Evaluation
PRODUCT_CORE65hWindows 10 Home
PRODUCT_CORE_COUNTRYSPECIFIC63hWindows 10 Home China
PRODUCT_CORE_N62hWindows 10 Home N
PRODUCT_CORE_SINGLELANGUAGE64hWindows 10 Home Single Language
PRODUCT_IOTUAP7BhWindows 10 IoT Core
PRODUCT_IOTUAPCOMMERCIAL83hWindows 10 IoT Core Commercial
PRODUCT_MOBILE_CORE68hWindows 10 Mobile
PRODUCT_MOBILE_ENTERPRISE85hWindows 10 Mobile Enterprise
PRODUCT_PROFESSIONAL30hWindows 10 Pro
PRODUCT_PROFESSIONAL_N31hWindows 10 Pro N
PRODUCT_CLOUD0B2hWindows 10 S
PRODUCT_CLOUDN0B3hWindows 10 S N
PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT1EhWindows Essential Business Server Management Server
PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING20hWindows Essential Business Server Messaging Server
PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY1FhWindows Essential Business Server Security Server
PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL3ChWindows Essential Server Solution Additional
PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC3EhWindows Essential Server Solution Additional SVC
PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT3BhWindows Essential Server Solution Management
PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC3DhWindows Essential Server Solution Management SVC
PRODUCT_HOME_PREMIUM_SERVER22hWindows Home Server 2011
PRODUCT_SOLUTION_EMBEDDEDSERVER38hWindows MultiPoint Server
PRODUCT_MULTIPOINT_PREMIUM_SERVER4DhWindows MultiPoint Server Premium (full installation)
PRODUCT_MULTIPOINT_STANDARD_SERVER4ChWindows MultiPoint Server Standard (full installation)
PRODUCT_SERVER_FOR_SMALLBUSINESS18hWindows Server 2008 for Windows Essential Server Solutions
PRODUCT_SERVER_FOR_SMALLBUSINESS_V23hWindows Server 2008 without Hyper-V for Windows Essential Server Solutions
PRODUCT_SMALLBUSINESS_SERVER9hWindows Small Business Server
PRODUCT_SB_SOLUTION_SERVER32hWindows Small Business Server 2011 Essentials
PRODUCT_HOME_SERVER13hWindows Storage Server 2008 R2 Essentials

如果呼叫成功,GetProductInfo 的返回值為非零,如果失敗返回 0,呼叫失敗的原因可能是輸入不正確的參數。另外在 Windows Server 2012 作業系統中,產品類型不會返回 PRODUCT_*_SERVER_CORE,例如資料中心版可能有人只安裝核心部份,有人完全安裝,但是全都返回 PRODUCT_DATACENTER。

GetNativeSystemInfo API

取得目前的作業系統資料,傳給在 WOW64 執行下的應用程式。本來 64 位元的作業系統只能執行 64 位元的應用程式;32 位元的作業系統只能執行 32 位元的應用程式。但是在 64 位元的作業系統下,仍然可以執行 32 位元或 64 位元的程式碼,這是因為 64 位元的 Windows 系統中,有一個稱為 WOW64 的子系統,我們可以把它看成是一個 32 位元的模擬器,主要目的就是使 32 位元的應用程式能在 64 位元的作業系統上順利執行。GetNativeSystemInfo 就是把目前作業系統的資料,傳給在 WOW64 執行下的應用程式,如果在 WOW64 執行下的程式,呼叫 GetSystemInfo 所得到的是 WOW64 的資料,因此如果 32 位元的應用程式在 64 位元的作業系統下,要得到作業系統的資料要呼叫 GetNativeSystemInfo。GetNativeSystemInfo 的原型是:

GetNativeSystemInfo PROTO   lpSystemInfo

只有一個參數,lpSystemInfo,是指向結構體 SYSTEM_INFO 的位址,SYSTEM_INFO 的內容如下:

SYSTEM_INFO                     STRUCT
wProcessorArchitecture          WORD    ?
wReserved                       WORD    ?
dwPageSize                      DWORD   ?
lpMinimumApplicationAddress     DWORD   ?
lpMaximumApplicationAddress     DWORD   ?
dwActiveProcessorMask           DWORD   ?
dwNumberOfProcessors            DWORD   ?
dwProcessorType                 DWORD   ?
dwAllocationGranularity         DWORD   ?
wProcessorLevel                 WORD    ?
wProcessorRevision              WORD    ?
SYSTEM_INFO                     ENDS

第一個欄位,wProcessorArchitecture,是指作業系統為哪一個處理器所設計,可以是下面幾種:

常數數值說明
PROCESSOR_ARCHITECTURE_INTEL0 x86 處理器,英特爾或超微出品 32 位元處理器,包含奔騰、K7 等處理器
PROCESSOR_ARCHITECTURE_MIPS1 MIPS ( 美普思科技 ) 所出品的 R2000、R3000、R4000 等處理器
PROCESSOR_ARCHITECTURE_ALPHA2 迪吉多公司開發的 32 位元處理器,如
PROCESSOR_ARCHITECTURE_PPC3 IBM、Apple 和 Motorola 共同開發 PowerPC 處理器,包含 PPC 601、603、604、620 等等
PROCESSOR_ARCHITECTURE_SHX4SHX 架構的處理器
PROCESSOR_ARCHITECTURE_ARM5ARM 架構的處理器
PROCESSOR_ARCHITECTURE_IA646 英特爾出品的安騰系列處理器,包含 Itanium、 Itanium 2
PROCESSOR_ARCHITECTURE_ALPHA647 迪吉多公司開發的 64 位元處理器,包含 21064、21066、21164 等處理器
PROCESSOR_ARCHITECTURE_MSIL8
PROCESSOR_ARCHITECTURE_AMD649 超微發展的 x-64 處理器,包含英特爾的 Core i3/5/7 和超微的 FX 系列、Ryzen 系列
PROCESSOR_ARCHITECTURE_UNKNOWN0FFFFH 不明

第二個欄位,wReserved,沒意義,不使用,只因相容性所以留著。第三個欄位,dwPageSize,是。接下來的 lpMinimumApplicationAddress 和 lpMaximumApplicationAddress 分別是指向應用程式或動態連接程式庫可存取的最低或最高記憶體位址。第六個欄位,dwActiveProcessorMask,是指哪些處理器已經啟動可用,若第零位元為一,表示第零個處理器可用。第七個欄位是 dwNumberOfProcessors,表示此電腦婺豸F幾個處理器。第八個欄位,dwProcessorType,是處理器類型,它的數值可以是下面幾種:

常數數值說明
PROCESSOR_INTEL_386386英特爾的 80386 處理器
PROCESSOR_INTEL_486486英特爾的 80486 處理器
PROCESSOR_INTEL_PENTIUM586英特爾的奔騰處理器
PROCESSOR_INTEL_IA642200英特爾的安騰處理器
PROCESSOR_MIPS_R40004000 美國 MIPS 公司所開發的一款 64 位元精簡指令集的處理器,R4000
PROCESSOR_AMD_X86648664包含超微 FX 系列、Ryzen 系列和英特爾 CORE ix 系列的處理器
PROCESSOR_ALPHA_2106421064迪吉多公司開發的 64 位元精簡指令集架構的處理器,稱為 Alpha 21064

不過此欄已經廢棄不用,根據 MSDN 的說法,要確定處理器,最好用 wProcessorArchitecture、wProcessorLevel 和 wProcessorRevision 三個欄位。

第九個欄位是 dwAllocationGranularity,

第十個欄位是 wProcessorLevel,指的是 CPU 等級,跟哪一家廠商,也就是 wProcessorArchitecture 欄位有關,可參考下表:

wProcessorArchitecturewProcessorLevel 及所代表 CPU 等級
PROCESSOR_ARCHITECTURE_INTEL3:Intel 80386
4:Intel 80486
5:Pentium
6: Pentium Pro、Pentium II、CORE I3/5/7
PROCESSOR_ARCHITECTURE_MIPS0004:MIPS R4000
PROCESSOR_ARCHITECTURE_ALPHA21064:Alpha 21064
21066:Alpha 21066
21164:Alpha 21164
PROCESSOR_ARCHITECTURE_PPC1:PPC 601
3:PPC 603
4:PPC 604
6:PPC 603+
9:PPC 604+
20:PPC 620

最後一個欄位,wProcessorRevision,是指處理器更詳細的資料,如下表:

處理器wProcessorRevision 之值
Intel 80386 或 80486可以看成是「xxyz」的形式,分成下面兩種情形:
   如果 xx=0FFH,則處理器的 model number=y-0AH,stepping identifier=z
  如果 xx≠0FFH,則 stepping letter=xx+41H,minor stepping=yz
Intel Pentium、Cyrix 或 NextGen 586可以看成是「xxyy」的形式,model=xx,Stepping=yy
MIPS R4000可以看成是「00xx」的形式,修訂編號=xx
Alpha可以看成是「xxyy」的形式,revision number=xx+41H,應顯示成:Model xx+41H,yy 忽略不用
PPC可以看成是「xxyy」的形式,revision number=xx.yy,應顯示成:xx.yy

登錄資料庫 ( Windows Registry )

Windows NT 4.0 有五種版本:伺服器版、企業伺服器版、終端伺服器版、工作站版、嵌入版,要分辨這些不同的版本,必須存取「登錄資料庫」。因此底下先介紹登錄資料庫。

Windows NT 4.x 登錄資料庫埵傢鰝岩貌瑣鷜X


自行製作 WinVer.ASM

底下小木偶要自行製作 WinVer.ASM 程式,它能在工作區媗蓂{出 Windows 作業系統的版本及一些資料。小木偶希望在較舊的作業系統,像 Windows 95 或 Windows NT 4.0 也能使用。但是有個問題必須解決,那就是只有在 Windows Vista 或 Windows Server 2008 及其以後的作業系統才能呼叫 GetProductInfo API,因為在此之前的作業系統並沒有這個 API。所以如果要使較舊的作業系統也能執行 WinVer 的話,就得使用變通的方法。

這個變通的方法是用 GetProcAddress API 取得 GetProductInfo 的進入點,然後用 PUSH 指令把 GetProductInfo 所需參數推入堆疊,再呼叫 GetProductInfo 的進入點即可。這樣就能避免在舊的作業系統中無法載入 WinVer 程式了。

GetProcAddress API

GetProcAddress API 是用來取得 API 服務程式 ( 小木偶喜歡稱它為副程式 ) 的進入點,此服務程式通常是 Win32 API,也可以是某個動態連結程式庫堛滌け{式。另外 GetProcAddress 也可以取得某個變數的位址。GetProcAddress 的原型是:

GetProcAddress  PROTO   hModule,lpProcName

hModule 是模組代碼,必須在呼叫前填好模組代碼,模組代碼通常是由呼叫 LoadLibrary 或 GetModuleHandle 的返回值。lpProcName 是副程式名稱的字串位址,也應在呼叫 GetProcAddress 之前就填好此參數。第 20 章奡ㄓ峞A您可以在 DEF 檔和在動態連結程式庫原始碼堙A使用不同的副程式名稱,但在呼叫 GetProcAddress 時,必須使用 DEF 檔堜狻w義的名稱。如果呼叫成功,返回值為副程式或變數的位址;如果呼叫失敗,返回 0。