Мне нужно найти способ программно определить, какой диск Windows использует для загрузки. Другими словами, мне нужен способ из Windows, чтобы определить, какой диск использует BIOS для загрузки всей системы.
Предоставляет ли Windows интерфейс для обнаружения этого? С учетом того, насколько велик Windows API, я надеюсь, что там есть что-то, что может помочь.
Терри
p.s. Простое чтение первых секторов жесткого диска ничего не дает. В моем корпусе разработчика у меня есть два жестких диска, и когда я смотрю на содержимое первых двух секторов на любом из жестких дисков, у меня есть стандартная стандартная MBR-пластина.
Отредактируйте, чтобы прояснить несколько вещей. Я хочу идентифицировать устройство с помощью строки, которая идентифицирует физический диск (в отличие от логического диска). Физические диски имеют форму «\\. \ PHYSICALDRIVEx», где x - это число. С другой стороны, логический диск идентифицируется строкой вида «\\. \ X», где x - буква диска.
Отредактируйте, чтобы обсудить несколько отклоненных идей. Здесь мне не помогает знание того, с какого логического тома загружалась Windows. Вот причина. Предположим, что C: использует зеркальную настройку RAID. Это означает, что у нас есть как минимум два физических диска. Теперь я получаю сопоставление логического диска с физическим диском и обнаруживаю, что этим томом используются два физических диска. Какой из них Windows использовала для загрузки? Конечно, это предполагает, что физический диск, который Windows использовала для загрузки, - это тот же физический диск, который содержит MBR.





Если C: не является диском, с которого загружались Windows.
Анализируйте переменную% SystemRoot%, она содержит расположение папки Windows (то есть c: \ windows).
На машине с установленной только Vista нет boot.ini.
Как вы хотите идентифицировать диск / раздел: по букве диска Windows, которой он сопоставлен (например, c: \, d :), или по его аппаратной сигнатуре (какая шина и т. д.).
Для простого случая посмотрите GetSystemDirectory
Простой случай: путь символа [MAX_PATH]; GetSystemDirectoryA (путь, MAX_PATH); Подробнее здесь: msdn.microsoft.com/en-us/library/ms724373(VS.85).aspx
Попробуйте HKEY_LOCAL_MACHINE \ SYSTEM \ Setup \ SystemPartition
Вы уверены, что ключ указывает это значение в системах uefi? По моему, он указывает на hardiskvolume2, который является разделом winre.
Вы можете использовать WMI, чтобы понять это. Класс Win32_BootConfiguration сообщит вам как логический диск, так и физическое устройство, с которого загружается Windows. В частности, свойство Caption сообщит вам, с какого устройство вы загружаетесь.
Например, в PowerShell просто введите gwmi Win32_BootConfiguration, чтобы получить ответ.
Это зависит от вашего определения, с какого диска Windows загружалась. Я могу придумать 3 разных ответа на стандартную систему BIOS (кто знает, что делает система EFI):
2 и 3 должно быть легко найти - я не уверен насчет 1. Хотя вы можете читать необработанные данные с диска, чтобы найти MBR, это не значит, что это загрузочное устройство BIOS на этот раз или даже в следующий раз (у вас может быть несколько диски с MBR).
Вы даже не можете быть уверены, что компьютер был запущен с жесткого диска - вполне возможно загрузить Windows с дискеты. В этом случае технически 1 и 2 будут дискетами, а 3 останется C: \ Windows.
Возможно, вам придется быть более конкретными в своих требованиях или целях.
Control PanelSystem and SecurityAdministrative ToolsSystem ConfigurationЕсли у вас установлено несколько копий Windows, та, с которой вы загружаетесь, будет называться, например:
Windows 7 (F:\Windows)
Windows 7 (C:\Windows) : Current OS, Default OS
Если вы НЕ перечисляете значки панели управления по категориям, пропустите шаг 2 и сразу перейдите к «Администрирование». Здесь нет опции «Система и безопасность», а опция «Система» - это не то, что вам нужно.
Вы можете попробовать использовать простую командную строку. bcdedit - это то, что вам нужно, просто запустите cmd от имени администратора и введите bcdedit или bcdedit \v, это не работает на XP, но надеюсь, что это не проблема.
В любом случае, для XP вы можете заглянуть в файл boot.ini.
Это должно быть /v, а не \v.
более простой способ выполните поиск загрузок в меню «Пуск» и щелкните загрузки в результатах поиска, чтобы увидеть, куда они приведут вас. Диск будет выделен в проводнике.
В командной строке, например, «Выполнить», введите cmd, введите systeminfo return. Дайте ему минуту, чтобы составить список и дать более подробный ответ.