天天看點

作業系統(一) BIOS/MBR 啟動過程

無論是什麼計算機或作業系統,标準(“IBM 相容”)台式 PC 和筆記本電腦都使用以下兩種方式之一開機和啟動:傳統的 BIOS-MBR 方法和較新的 UEFI-GPT 方法。本文總結了傳統 BIOS PC 加載作業系統的過程,涵蓋了 BIOS、MBR 和引導扇區的基礎知識和細節。

文章目錄

  • ​​1 BIOS/MBR 啟動過程概述​​
  • ​​2 啟動過程的四大組成部分​​
  • ​​2.1 BIOS​​
  • ​​2.1.1 POST 過程​​
  • ​​2.1.2 BIOS 啟動切換​​
  • ​​2.2 啟動裝置/啟動盤/驅動器 0​​
  • ​​2.3 主引導記錄 (MBR/The Master Boot Record)​​
  • ​​2.3.1 分區表(The Partition Table)​​
  • ​​2.3.2 引導代碼(Bootstrap Code)​​
  • ​​2.3.3 引導簽名​​
  • ​​2.4 分區引導扇區(The Partition Boot Sector)​​
  • ​​2.4.1 第二階段引導加載程式​​
  • ​​2.5 引導加載程式(bootloader)​​
  • ​​2.5.1 引導配置檔案​​
  • ​​2.5.2 流行的引導加載程式​​
  • ​​3 引導過程​​
  • ​​4 結論​​
  • ​​5 引導加載程式故障排除​​
  • ​​6 補充 提出修改意見​​
  • ​​互相交流​​

1 BIOS/MBR 啟動過程概述

在下圖中,顯示了所有标準計算機和作業系統的啟動順序:

作業系統(一) BIOS/MBR 啟動過程

引導過程被分解為幾個主要元件,每個元件都是一個完全獨立的子系統,具有許多不同的選項和變化。每個元件的實作可能因硬體和作業系統而異,但它們遵循的規則和工作過程始終相同。

2 啟動過程的四大組成部分

2.1 BIOS

BIOS的代碼被固定到PC主機闆(motherboard),通常存儲在所謂的EEPROM中(一種儲存的媒體),和硬體很相關。BIOS 是與硬體整體連接配接的最低軟體級别,并且是引導加載程式和作業系統核心,可以與硬體通信并控制硬體的接口。通過對 BIOS 的标準化調用(計算機術語中的“中斷”),作業系統可以觸發 BIOS 讀取和寫入磁盤并與其他硬體元件交流。

當PC 首次通電時,會發生很多事情。按下電源按鈕并觸發一個開關,該開關激活電源并将電流從 PSU 引導至主機闆,并主要通過它給PC 的所有各種元件通電。當每個單獨的元件接收到賦予生命的電力時,它就會通電并初始化為初始狀态。RAM 和 PSU 是較簡單的元件,會作為一系列邏輯電路(AND/NAND 和 OR/NOR 門)的功能。而更複雜的部分(例如顯示卡)則有自己的微控制器。

2.1.1 POST 過程

一旦 PC 通電,BIOS 就會作為 POST(開機自檢(Power-On Self Test))過程的一部分開始工作。它将 PC 的所有不同部分連接配接在一起,并根據需要在它們之間建立接口,将視訊顯示設定為接受基本 VGA 并将其顯示在螢幕上,初始化存儲庫并讓 CPU 通路所有硬體。它掃描連接配接硬體的 IO 總線,并識别和映射對已連接配接到 PC 的硬碟的通路。較新主機闆上的 BIOS 足夠智能,甚至可以識别和識别 USB 裝置,例如外部驅動器和 USB 滑鼠。

在 POST 過程中,在可能的情況下進行快速測試,經常會發現由不相容的硬體、斷開的裝置或故障元件引起的錯誤。 BIOS 負責各種錯誤消息,例如“鍵盤錯誤或不存在鍵盤”或有關不比對/無法識别的記憶體的警告。此時,BIOS 的大部分工作已完成,幾乎可以進入引導過程的下一階段。

剩下的唯一事情就是運作所謂的“附加 ROM”:某些連接配接到主機闆的硬體可能需要使用者幹預才能完成其初始化,而 BIOS 實際上将整個 PC 的控制權交給了編碼到硬體中的軟體例程(例如顯示卡或 RAID 控制器)。它們承擔計算機及其顯示器的控制權,在 PC 真正完成通電之前進行設定 RAID 陣列或配置顯示設定等操作。當它們完成執行時,它們會将計算機的控制權交還給 BIOS,然後 PC 進入基本可用狀态并準備開始。

2.1.2 BIOS 啟動切換

在配置了 PC 的基本輸入和輸出裝置後,BIOS 現在進入最後階段。這個階段用于使用者進行單獨的配置。可以類比我們開機時,通常會看到一個選項,可以快速按一個鍵進入 BIOS 設定,可以從中配置硬體設定并控制 PC 的啟動方式。如果什麼都不選擇,BIOS 将開始使用預設設定實際“啟動” PC 。

前面我們提到 BIOS 工作的一個重要部分是檢測連接配接的硬碟。因為 BIOS 将從第一個硬碟加載一個非常小的程式到記憶體,并告訴 CPU 執行它。此時,BIOS将計算機的控制權交給這個硬碟,完成了BIOS自身的使命。這個硬碟驅動器就被稱為“啟動裝置”、“啟動盤”或“驅動器 0”,通常可以在 BIOS 設定中選擇或設定。

2.2 啟動裝置/啟動盤/驅動器 0

無論 BIOS 配置為從本地硬碟啟動還是從可移動 USB 裝置啟動,切換順序都是相同的。一旦 BIOS POST(2.1.1) 和 AddOn ROM 程式(2.1.2)完成,BIOS 就會從所選引導裝置的硬碟驅動器加載前 512 個位元組——這 512 個位元組就是通常所說的 MBR—主引導記錄。

2.3 主引導記錄 (MBR/The Master Boot Record)

MBR 是BIOS-MBR啟動方式中,第一個也是最重要的元件。每個硬碟都有一個 MBR,它包含幾個重要的資訊。

作業系統(一) BIOS/MBR 啟動過程

2.3.1 分區表(The Partition Table)

首先也是最重要的,MBR 包含一個叫做分區表的東西,它儲存硬碟上的分區索引。(類似我們電腦中的C槽和D盤,兩個不同的分區,但可能在同一個硬碟上),也可以稱為目錄表。對于MBR來說,隻能有四個分區,GPT卻可以有最多128個。沒有MBR,(例如在軟碟上),整個磁盤隻能包含一個分區,這意味着不能在同一硬碟驅動器上擁有不同檔案系統,也就是說無法在該磁盤上同時安裝 Linux 和 Windows。如果一個

硬碟分為C,D和E盤,可以在C安裝Windows,E上安裝Linux。

2.3.2 引導代碼(Bootstrap Code)

其次,MBR 還包含一段非常重要的代碼,稱為“引導代碼”。 這 512 位元組中的前 440可以包含幾乎任何内容——BIOS 将加載它并按原樣執行其内容,啟動引導加載程式。440 位元組非常小。440 位元組隻是一個古老的 1.44 MiB 軟碟容量的 0.3%——幾乎不足以容納任何形式的有用代碼——而且太小了,無法做一些像從磁盤調用作業系統核心的任務。

考慮到 MBR 的引導程式代碼部分是多麼的小,它真正可以服務的唯一有用的目的是從磁盤中查找另一個檔案并加載它,以執行實際的引導過程。是以,這個引導代碼通常被稱為“第一階段引導加載程式”。“第一階段引導加載程式”會指向“第二階段引導加載程式”,根據作業系統不同,“第二階段引導加載程式”的确切位置不同。

但在 Windows 上,“第一階段引導加載程式”将在 MBR 的分區表中搜尋标記為“活動”的分區,這個活動分區的開頭在其起始扇區(也稱為“引導扇區”)中包含引導代碼的下一部分。在正确建立的 MBR 磁盤上,一次隻能将一個分區标記為活動分區。

是以,MBR 中引導程式代碼段的工作非常簡單:從分區表中查找活動分區,并将該代碼加載到記憶體中,作為引導鍊中的下一個環節由 CPU 執行。

由于作業系統不同,它實際上可能會查找寫死分區而不是活動分區(例如始終加載第三個分區的引導扇區),并且分區引導扇區内的引導代碼偏移量可能會改變(例如它可能不是分區的前 2 KiB,而是從目前月相的第二倍數開始的第二個 KiB 或 6 KiB)——但基本概念保持不變。

然而,出于遺留相容性的原因,MBR 幾乎總是加載活動分區的第一個扇區,這意味着另一個扇區也隻有 512 位元組。

2.3.3 引導簽名

在 IBM 相容的 PC(基本上就是所有的電腦)上,512 位元組 MBR 的最後兩個位元組稱為 引導簽名,BIOS 使用它們來确定所選的引導驅動器(就是MBR所在的這個啟動裝置/啟動盤/驅動器 0)是否實際可引導。在包含有效引導代碼的磁盤上,MBR 的最後兩個位元組應始終為 0x55, 0xAA。

如果 MBR 的最後兩個位元組分别不等于 0x55 和 0xAA,則 BIOS 将假定磁盤 不是bootable 并且不是有效的引導選項 - 在這種情況下,它将回退到引導順序清單中的下一個裝置(如 BIOS 設定中的配置)。例如,如果 BIOS 中的第一個引導裝置設定為 U 盤,第二個是本地硬碟,如果插入了沒有正确引導簽名的 U 盤,BIOS 将跳過它并繼續嘗試從本地磁盤加載。如果引導裝置清單中沒有磁盤具有正确的 0x55 0xAA 引導簽名,則 BIOS 将顯示錯誤,例如經常遇到的錯誤的“無引導裝置可用”或“重新開機并選擇正确的引導裝置”。

2.4 分區引導扇區(The Partition Boot Sector)

如上所述,MBR 中的引導程式代碼通常會從活動分區的開頭加載一個位元組序列。分區的确切布局取決于建立或格式化分區的檔案系統,但通常看起來像這樣:

作業系統(一) BIOS/MBR 啟動過程

同樣,根據作業系統和檔案系統,分區的确切布局肯定會有所不同。但這與您通常會看到的情況非常接近:

  • 單個 JMP(跳轉)指令,它是與goto指令等效 的彙編代碼。
  • 檔案系統标頭,它将包含特定于檔案系統本身的重要資訊。
  • 另一個引導代碼段,包含引導加載程式過程的下一階段。
  • 扇區結束标記,與我們之前在 MBR 中看到的 0x55 0xAA 引導簽名非常相似。

    這通常都打包到分區的第一個扇區中,該扇區通常也隻有 512 位元組長,而且不能容納太多資料或指令。在用于較新作業系統的現代檔案系統上,引導代碼可以利用增強的 BIOS 功能來讀取和執行超過 512 個位元組的内容,但在所有情況下,基本步驟保持不變:

  • MBR 将活動分區的前 512 位元組加載到記憶體中,并訓示 CPU 執行它們。

    分區引導扇區的前(三個)位元組包含一條 JMP 指令,告訴 CPU 跳過 xx 個位元組,并從那裡執行引導加載程式的下一階段。

  • CPU 遵循 JMP 指令并尋找包含在分區引導扇區中的引導代碼的開頭,并開始執行。

    分區中的引導代碼不是道路的盡頭,它隻是前進的另一步。由于在分區引導扇區中為引導代碼配置設定的空間很少,它包含的代碼通常以另一個 JMP 指令結束,該指令訓示 CPU 跳轉到 分區中的 下一個扇區,該扇區通常為分區的其餘部分留出代碼。根據檔案系統的不同,這可以是幾個扇區的長度,或者需要多長才能适應引導加載程式的這個階段。

2.4.1 第二階段引導加載程式

引導加載程式的第二階段,存儲在引導程式部分的分區引導扇區中,并且可以選擇繼續超越它,執行引導加載程式過程的下一步:它查找存儲在分區本身上的檔案(作為正常檔案) ,并告訴 CPU 執行其内容以開始引導過程的最後部分。

與之前的 MBR 和分區引導扇區的引導段不同,引導過程的下一步不是存儲在分區内的專用偏移量處(即引導代碼不能隻是告訴 CPU 到 JMP 到位置 0xABC 并執行引導檔案)——它是一個普通檔案,存儲在磁盤檔案系統中的其他普通檔案中。

這個明顯更複雜的引導程式代碼實際上必須讀取分區上檔案系統的目錄,7來自舊版本檔案系統的第二階段引導加載程式通常對它們需要加載的引導加載程式檔案施加複雜的限制,例如要求它們出現在分區的前幾個 KB 中,或者無法在分區上加載非連續配置設定的檔案。該檔案是引導加載程式拼圖的最後一部分,通常對其大小或内容沒有限制,這意味着它可以像從磁盤加載作業系統核心并傳遞所需的那樣大和複雜将 PC 控制到 OS。

2.5 引導加載程式(bootloader)

磁盤上的實際引導加載程式檔案構成引導加載過程的最後部分。當人們談論引導加載程式和引導檔案時,他們通常指的是引導過程的最後一個關鍵步驟。

作業系統(一) BIOS/MBR 啟動過程
  • 引導加載程式序列
  1. 一旦 PC 的控制權從 BIOS 移交給 MBR 中的引導程式代碼,
  2. 從 MBR 移交給分區引導扇區中的引導程式代碼,
  3. 并從那裡移交給活動分區上的可執行引導檔案,實際邏輯涉及确定要加載哪個作業系統、從哪裡加載它、傳遞給它的參數/選項以及完成可能可用的與使用者的任何互動,啟動作業系統的實際過程就開始了。

2.5.1 引導配置檔案

雖然可執行引導加載程式檔案理論上可以包含與要從磁盤加載的作業系統有關的寫死資訊,但這根本不是很有用。是以,幾乎所有引導加載程式都将實際的、可執行的引導加載程式與包含要加載的作業系統資訊的配置檔案或資料庫分開。下面提到的所有主要引導加載程式都支援加載多個作業系統,這一過程稱為“雙引導”或“多重引導”。

2.5.2 流行的引導加載程式

如前所述,有許多不同的引導加載程式。每個作業系統都有自己的引導加載程式,專門設計用于讀取其檔案系統并定位需要加載以便作業系統運作的核心。以下是一些常見作業系統的一些更流行的引導加載程式及其基本配置檔案:

作業系統(一) BIOS/MBR 啟動過程

NTLDR 引導程式 GRUB

每個流行的作業系統都有自己的預設引導加載程式。Windows NT、2000 和 XP 以及 Windows Server 2000 和 Windows Server 2003 使用 NTLDR 引導加載程式。Windows Vista 引入了 BOOTMGR 引導加載程式,目前由 Windows Vista、7、8 和 10 以及 Windows Server 2008 和 2012 使用。雖然多年來 Linux 已經存在許多不同的引導加載程式,但兩個主要的引導加載程式是 Lilo 和GRUB,但現在大多數 Linux 發行版都結合了全能的 GRUB2 引導加載程式。

NTLDR

NTLDR 是舊的 Windows 引導加載程式,最初用于 Windows NT(是以“NTLDR”中的“NT”,“NT Loader”的縮寫),目前用于 Windows NT、Windows 2000、Windows XP 和 Windows Server 2003。

NTLDR 将其引導配置存儲在一個名為 BOOT.INI 的基于文本的簡單檔案中,該檔案存儲在活動分區的根目錄中(通常為 C:\Boot.ini)。一旦第二階段引導加載程式加載并執行 NTLDR,它就會執行一個名為 NTDETECT.COM 的幫助程式,該程式可識别硬體并生成有關系統的資訊索引。有關 NTLDR、BOOT.INI 和 NTDETECT.COM 的更多資訊,請參見我們知識庫中的連結文章。

BOOTMGR

BOOTMGR 是 Microsoft Windows 使用的較新版本的引導加載程式,它首先在 Windows Vista 的測試版(然後是 Windows Codename Longhorn)中引入。它目前用于 Windows Vista、Windows 7、Windows 8、Windows 8.1 和 Windows 10,以及 Windows Server 2008 和 Windows Server 2012。

BOOTMGR 标志着與 NTLDR 的顯着背離。它是一個獨立的引導加載程式,具有更多選項,專門設計用于與現代作業系統中的新功能相容,并在設計時考慮了 EFI 和 GPT(盡管隻有某些版本的 BOOTMGR 支援從 GPT 磁盤或 UEFI 中加載 Windows /EFI 配置)。與 NTLDR 不同,BOOTMGR 将其配置存儲在一個名為 BCD 的檔案中——Boot Configuration Database 的縮寫。與 BOOT.INI 不同,BCD 檔案是一個二進制資料庫,無法手動打開和編輯。8相反,必須使用專門設計的指令行工具(如 bcdedit.exe)和更使用者友好的 GUI 實用程式(如EasyBCD) 來讀取和修改作業系統清單。

格魯布

GRUB 是 1990 年代和 2000 年代初期主要用于 Linux 的引導加載程式,其設計不僅可以加載 Linux,還可以加載為其核心實作開放式多重引導規範的任何作業系統。包含空白格式的作業系統清單的 GRUB 配置檔案通常稱為 menu.lst 或 grub.lst,可在 /boot/ 或 /boot/grub/ 目錄下找到。由于可以通過使用不同選項重新編譯 GRUB 來更改這些值,是以不同的 Linux 發行版在不同的目錄中以不同的名稱放置此檔案。

GRUB 2

雖然 GRUB 最終戰勝了 Lilo 和 eLilo,但在 2002 年左右被 GRUB 2 取代,舊的 GRUB 正式更名為“Legacy GRUB”。令人困惑的是,GRUB 2 現在正式稱為 GRUB,而舊的 GRUB 已正式降級為“Legacy GRUB”,但幸運的是,您會在網上找到大多數将 GRUB 引導加載程式的新版本稱為 GRUB 2 的資源。

GRUB 2 是一個功能強大的子產品化引導加載程式,更類似于作業系統而不是引導加載程式。它可以加載數十種不同的作業系統,并支援自定義插件(“子產品”)以引入更多功能并支援複雜的啟動程式。

GRUB 2 的實際引導加載程式檔案不是名為 GRUB2 的檔案,而是通常名為core.img的檔案。與 Legacy GRUB 不同,GRUB 2 配置檔案更像是一個腳本,而不是傳統的配置檔案。grub.cfg 檔案通常位于引導分區上的 /boot/grub/grub.cfg,與 shell 腳本相似,并支援函數等進階概念。GRUB 2 的核心功能由子產品補充,這些子產品通常位于 /boot/grub/ 目錄的子目錄中。

3 引導過程

如前所述,引導過程的階段比前面的步驟要複雜一些,主要是由于讀取檔案系統的額外複雜性。引導加載程式還必須擷取有關底層機器硬體的資訊(通過 BIOS 或自己擷取),以便從正确的分區正确加載所需的作業系統并提供可能需要的任何其他檔案或資料。它還必須從存儲在引導分區的檔案系統上的正常檔案中讀取自己的配置檔案,是以它至少需要對其駐留的任何檔案系統具有完整的讀取支援。

作業系統(一) BIOS/MBR 啟動過程

引導加載程式流程圖

啟動檔案系統通路

在其他事情發生之前,當引導加載程式第一次運作時,它必須加載并運作原始檔案系統“驅動程式”,使其至少能夠讀取它所在的檔案系統。由于在此之前無法讀取檔案系統,是以必須将提供此功能的代碼編譯到核心引導加載程式檔案本身中。

加載和讀取配置檔案

通過支援加載的檔案系統,引導加載程式現在可以從磁盤讀取作業系統清單以及指定多個作業系統的事件,準備顯示。

加載和運作支援子產品

對于不是完全獨立的引導加載程式(例如 NTLDR 和 GRUB 2),引導加載程式現在從磁盤加載任何支援子產品或幫助程式(例如 NTDETECT.COM)。要加載的子產品清單可以在剛剛讀取或寫死/編譯到引導加載程式本身的配置檔案中指定。通常,每個子產品都會在它被定位并從磁盤加載時執行。

顯示引導菜單

此時,所有相關配置都已準備就緒,引導加載程式可以在螢幕上顯示通常所說的引導菜單。如果安裝了多個作業系統,則計算機使用者可以通過引導菜單浏覽作業系統清單并選擇要加載的作業系統。從這裡開始,某些引導加載程式還可以指定運作時選項,例如是否以安全模式加載標明的作業系統。

加載作業系統核心

一旦記錄了使用者的選擇,引導加載程式就會進入引導過程的最後階段。根據作業系統和核心類型,引導加載程式将從配置檔案中指定的路徑(在任何子子產品的幫助下,如果需要)加載核心映像到記憶體中。然後它訓示 CPU JMP 到新加載的核心中的某個位置并從那裡開始執行。

4 結論

這樣就結束了從按下按鈕開始到作業系統核心加載到記憶體并執行的漫長旅程。引導加載程式過程肯定比大多數人意識到的要微妙和複雜得多,而且它的設計和發展都以相當标準化的方式跨不同平台和各種作業系統工作。

引導加載程式的各個元件大體上是自給自足的。它們可以單獨換出而不會影響整體,這意味着您可以添加磁盤并從不同的裝置啟動,而不必擔心擾亂現有的配置和作業系統。這也意味着,您不再需要一個硬體/軟體來配置、設定、維護和調試,而是留下一個複雜且通常非常脆弱的鍊條,其中有多個容易損壞和故障的點。

正常工作時,啟動過程是一台運作良好的機器,但是當災難發生時,它可能是一個非常難以了解和調試的過程。

5 引導加載程式故障排除

啟動過程的複雜性意味着需要設定和配置很多東西,還有很多可能會出錯。下面列出了對引導加載程式進行故障排除時可以派上用場的一些資源:

适用于 Windows 的 Easy Recovery Essentials:點選式可啟動恢複 CD,它将重新建立整個上述啟動鍊,無論出現什麼問題,都可以讓您幾乎回到 Windows。

EasyBCD:一個易于使用的實用程式,允許您在 Windows、Linux、Mac、FreeBSD 等之間設定和配置雙引導或多引導。

超級 GRUB2 磁盤:一個可引導的 GRUB2 磁盤,當您的 GRUB 或 GRUB2 配置錯誤或出現故障時,可用于引導至 Linux。

也可以看看

我們 wiki 和其他線上網站中的這些附加文章和資源包含與此主題相關的附加資訊:

EFI/GPT 引導過程:本文檔涵蓋了 BIOS/MBR 引導過程的基礎知識,現在閱讀并了解具有 UEFI 和 GPT 的較新 PC 如何引導。

EFI/GPT和BIOS/MBR的差別

6 補充 提出修改意見

最初,BIOS 存儲在所謂的 ROM(“隻讀存儲器”)晶片上:BIOS 代碼被寫死到晶片中,永遠無法更改。對 BIOS 的更新很少見,而且隻能通過實體更換主機闆上的 BIOS 晶片來完成。随着時間的推移和更好的技術,可擦除 ROM 晶片被開發出來,可以通過将它們放在一個盒子裡并用一定劑量的紫外線(紫外線)輻射來清除它們,然後用 ROM 晶片程式設計硬體重新程式設計它們的内容。當它變得陳舊和累人時,開發了電可擦除可程式設計 ROM(簡稱 EEPROM)——有了它,EEPROM 晶片的特殊選擇引腳上的電子信号将觸發擦除,晶片可以直接從它的位置進行程式設計位于主機闆上。簡單的檸檬汁, ↩

現在幾乎每個主要的硬體元件都将固件控制在其邏輯硬體中,但我們在這裡忽略了微控制器固件。 ↩

根據作業系統和平台的不同,引導代碼實際上可能隻有 434 到 446 位元組,因為該區域的一部分可能會留出用于其他目的,例如磁盤簽名和磁盤時間戳。在大多數現代作業系統上,440 是上限,因為最後 6 個位元組是為偏移量 0x01B8 處的 4 位元組磁盤簽名和訓示偏移量 0x01BC 處的驅動器讀寫狀态的 2 位元組字段(0x00訓示讀寫和 0x5A5A 訓示隻讀驅動器)。 ↩

這裡有一個巨大的警告:可引導/活動标志實際上是單個(四個之一)分區記錄的屬性,而不是分區表(分區記錄清單)或 MBR 本身。這意味着從 技術上講 ,訓示分區可引導的實際位實際上可以同時存在(設定為值 0x80)一個以上(或全部!)個分區!這是一個無效的配置,但可能會導緻許多不同的啟動問題! ↩

在像所有 x86 CPU 一樣的小端機器上,這将是單個字 0xAA55,而在像 PowerPC 這樣的大端架構上,它将被讀取和寫入 0x55AA。 ↩

彙編是最原始的程式設計語言,由 CPU 直接讀取和執行的單個指令組成。 ↩

在 NTFS 上,這稱為主檔案表,簡稱 MFT。在 FAT32 上,這稱為 FAT(檔案配置設定表)。 ↩

事實上,BCD 檔案是一個标準的 Windows 系統資料庫配置單元,可以安裝它以使用諸如 regedit.exe 之類的工具進行編輯。 ↩

​​英文原文連結​​

互相交流

繼續閱讀