Как определить, какой диск Windows используется для загрузки - PullRequest
9 голосов
/ 02 сентября 2008

Мне нужно найти способ, чтобы программно определить, какой диск Windows использует для загрузки. Другими словами, мне нужен способ из Windows, чтобы определить, какой диск BIOS использует для загрузки всей системы.

Предоставляет ли Windows интерфейс для обнаружения этого? С учетом того, насколько велик Windows API, я надеюсь, что там есть что-то, что могло бы помочь.

Терри

p.s. Просто чтение первых секторов жесткого диска ничего не дает. На моем устройстве dev у меня два жестких диска, и когда я смотрю содержимое первых двух секторов на любом из жестких дисков, у меня есть стандартная плата MBR.

Изменить, чтобы уточнить несколько вещей. Я хочу идентифицировать устройство с помощью строки, которая будет идентифицировать физический диск (в отличие от логического диска). Физические диски имеют вид "\\. \ PHYSICALDRIVEx", где x - это число. С другой стороны, логический диск идентифицируется строкой вида "\\. \ X", где x - буква диска.

Редактировать, чтобы обсудить несколько идей, которые были выброшены. Знание того, какой логический том используется для загрузки Windows, здесь не поможет. Вот причина. Предположим, что C: использует зеркальную настройку RAID. Теперь это означает, что у нас есть как минимум два физических диска. Теперь я сопоставляю логический диск с физическим диском и обнаруживаю, что этот том использует два физических диска. Какой из них использовал Windows для загрузки? Конечно, это предполагает, что физический диск, используемый Windows для загрузки, является тем же физическим диском, который содержит MBR.

Ответы [ 7 ]

8 голосов
/ 25 августа 2013
  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
5 голосов
/ 02 сентября 2008

Если только C: это не тот диск, с которого загружалась Windows.
Разобрать переменную% SystemRoot%, она содержит местоположение папки Windows (т.е. c: \ windows).

4 голосов
/ 03 сентября 2008

Вы можете использовать WMI, чтобы понять это. Класс Win32_BootConfiguration сообщит вам как логический диск, так и физическое устройство, с которого загружается Windows. В частности, свойство Caption сообщит вам, с какого устройства вы загружаетесь.

Например, в powershell просто наберите gwmi Win32_BootConfiguration , чтобы получить ответ.

3 голосов
/ 03 сентября 2008

Это зависит от вашего определения, какой диск Windows использовался для загрузки. Я могу придумать 3 разных ответа в стандартной системе BIOS (кто знает, что делает система EFI):

  1. Диск с активной MBR
  2. Активный раздел, с NTLDR (системный раздел)
  3. Раздел с Windows на нем (загрузочный раздел)

2 и 3 должно быть легко найти - я не очень уверен насчет 1. Хотя вы можете читать сырые диски, чтобы найти MBR, это не значит, что это загрузочное устройство BIOS в этот раз или даже в следующий может иметь несколько дисков с MBR).

Вы даже не можете быть уверены, что компьютер был запущен с жесткого диска - вполне возможно загрузить Windows с дискеты. В этом случае и 1, и 2 будут технически гибкими дисками, а 3 останется C: \ Windows.

Возможно, вам нужно быть более точным в своих требованиях или целях.

2 голосов
/ 02 сентября 2008

На компьютере, на котором установлена ​​только Vista, нет boot.ini.

Как вы хотите идентифицировать диск / раздел: по букве диска Windows он отображается (например, c: \, d :) или по его аппаратной сигнатуре (какая шина и т. Д.).

Для простого случая проверьте GetSystemDirectory

1 голос
/ 02 сентября 2008

Попробуйте HKEY_LOCAL_MACHINE \ SYSTEM \ Setup \ SystemPartition

0 голосов
/ 15 декабря 2015

Вы можете попробовать использовать простую командную строку. bcdedit - это то, что вам нужно, просто запустите cmd от имени администратора и введите bcdedit или bcdedit \v, это не работает в XP, но надеюсь, что это не проблема.

В любом случае для XP вы можете взглянуть на boot.ini файл.

...