2008-09-02 144 views
8

我需要找到一種方法,以編程方式確定Windows使用哪個磁盤驅動器啓動。換句話說,我需要從Windows的方式來確定BIOS使用哪個驅動器來引導整個系統。如何判斷Windows用於啓動哪個磁盤

Windows是否暴露了一個接口來發現它?隨着Windows API的規模有多大,我希望有一些東西埋在那裏,可以做到這一點。

特里

p.s.只是讀取硬盤的第一個扇區並不會令人陶醉。在我的開發箱中,我有兩個硬盤,當我查看兩個硬盤中的第一對扇區的內容時,我有一個標準的鍋爐板MBR。

編輯來澄清一些事情。 我想識別設備的方式是使用一個字符串來標識物理磁盤驅動器(而不是邏輯磁盤驅動器)。物理磁盤驅動器的格式爲「\\。\ PHYSICALDRIVEx」,其中x是一個數字。另一方面,邏輯驅動器由一個形式爲「\\。\ x」的字符串標識,其中x是一個驅動器號。

編輯討論一些被拋出的想法。 知道Windows用來啓動的邏輯卷在這裏沒有幫助。這是原因。假定C:正在使用鏡像RAID設置。現在,這意味着我們至少有兩個物理驅動器。現在,我得到了從邏輯驅動器到物理驅動器的映射,並且我發現該卷有兩個物理驅動器。 Windows使用哪一個引導?當然,這是假設用於啓動的物理驅動器Windows是包含MBR的物理驅動器。

+0

在命令行(即運行)中,輸入cmd,輸入systeminfo return。給它一分鐘來編譯列表和答案更詳細。 – 2013-10-01 15:22:20

回答

5

除非C:不是Windows啓動的驅動器。
解析%SystemRoot%變量,它包含windows文件夾的位置(即c:\ windows)。

1

安裝了Vista的機器上沒有boot.ini。

如何識別驅動器/分區:通過它映射到的驅動器盤符(例如c:\,d :)或其硬件簽名(哪個總線等)。

對於簡單的情況下,簽出GetSystemDirectory

+0

簡單案例: char path [MAX_PATH]; GetSystemDirectoryA(path,MAX_PATH); 更多信息:http://msdn.microsoft.com/en-us/library/ms724373(VS.85).aspx – 2009-04-27 16:48:45

1

嘗試HKEY_LOCAL_MACHINE \ SYSTEM \ SETUP \ SYSTEMPARTITION

+0

您確定密鑰表示uefi系統上的值嗎?在我的,它指向hardiskvolume2這是winre分區。 – user2284570 2016-01-08 19:30:03

2

您可以使用WMI摸不着頭腦。 Win32_BootConfiguration類將告訴您Windows引導的邏輯驅動器和物理設備。具體來說,標題屬性會告訴你哪個設備您正在啓動。

例如,在PowerShell中,只需鍵入gwmi Win32_BootConfiguration即可獲得答案。

3

這取決於您用於啓動Windows的磁盤驅動器的定義。我可以在標準的BIOS系統上認爲的3個不同的答案(誰知道一個EFI系統做什麼):

  1. 包含活動MBR
  2. 活動分區,用NTLDR(系統分區)
  3. 驅動
  4. 它(引導分區)

2和3的Windows分區應該很容易找到 - 我不太確定1.雖然你可以閱讀找到一個MBR原始磁盤,即沒有按這意味着這次是BIOS啓動設備,甚至下一次(你可能有多個帶有MBR的磁盤)。

你甚至無法確定PC是否從硬盤啓動 - 完全可以從軟盤啓動Windows。在這種情況下,1和2在技術上都是軟盤,但3仍然是C:\ Windows。

您可能需要針對您的要求或目標更具體一些。

6
  1. 進入Control Panel
  2. System and Security
  3. Administrative Tools
  4. 啓動的System Configuration工具

如果您已經安裝了Windows的多個副本,您啓動與一個將被命名爲如:

Windows 7 (F:\Windows) 
Windows 7 (C:\Windows) : Current OS, Default OS 
0

您可以嘗試使用簡單的命令行。 bcdedit是你所需要的,只需以管理員身份運行cmd並鍵入bcdeditbcdedit \v,這在XP上不起作用,但希望這不是問題。

無論如何,對於XP,你可以看看boot.ini文件。

相關問題