Yoda писал(а):
Никак не распознаю. Не дело это MBR-загрузчиков, распознавать, что именно они загрузили. Идеальный МБР должен грузить любую, в т.ч. будущую систему и не закладываться, что именно он может встретить в загрузочном секторе. А то именно от избыточного интеллекта и возникают некоторые проблемы.
Т.к. у меня MBR-загрузчик и EBR-загрузчик являются относительно независимыми модулями, у меня была задача как-то определять обнуленный код EBR (проверять обнуленность явным способом сложнее, к тому же есть и вторая задача). Т.к. сейчас основным методом передачи номера загрузочного дополнительного раздела (в случае альтернативной загрузки) из MBR в EBR является пропатчивание в памяти, нужно иметь какой-то (пусть и не сильно надежный) способ обнаружения "родного" EBR, чтобы не повредить сторонний. Я рассматривал и другой способ передачи этого параметра (без пропатчивания), но пока он не реализован (на то есть свои причины).
Цитата:
Это почему? Я нигде не нашёл явного запрета на использование расширенного раздела в качестве загрузочного. Более того, встречаются упоминания того, что потенциально он может быть загрузочным. Другое дело, что утилиты общего назначения не хотят делать его загрузочным, но это ведь не запрет.
Так дело как раз в том, чтобы существующие утилиты проглатывали наши нововведения, не ругаясь и не впадая в ступор. Кстати, я не встречал утилит, которым бы не нравилось присутствие кода EBR, более того, многие утилиты сохраняют код EBR даже в случае корректировки таблицы в самой первой по уровню вложенности EBR.
Цитата:
Как ты поступаешь с количеством скрытых секторов в загрузочном секторе расширенного раздела?
Далее, видимо, понял, но все-таки скажу - я корректирую это поле и не только его!
Цитата:
В принципе, пока нет категорической привязки к EAX. Я подумаю.
ОК, чтобы лучше думалось, немного об используемых у меня параметрах (в принципе я ссылку уже давал, где все это обсуждалось, но все же):
- DS:SI - указатель на дескриптор загрузочного раздела.
- DL - номер загрузочного диска.
- DH - номер загрузочного раздела или ноль.
- AX - значение, отличное от "!G".
- Дескриптор загрузочного раздела.
- Байт по адресу 7DFFh - расширенная загрузочная сигнатура 88h.
Тоже самое должен передавать EBR-загрузчик первичному загрузчику дополнительного раздела (только обязательно DH=5-255, плюс для дополнительного раздела внутри расширенного раздела типа 5 нужно корректировать поле StartLBA в дескрипторе и еще для определенных типов разделов поле HiddenSectors в BR), но т.к. мы говорили только о взаимозаменяемости MBR/EBR, то ты можешь использовать свои выходные параметры EBR.
Цитата:
Ну это совершеннейший атавизм. Т.е. предполагается, что кто-то до сих пор использует музейную XT или AT/286 и ты разрабатываешь новую ОС, которая будет работать на этом пугале прогресса? :))) Это несерьёзно.
Мои загрузчики можно использовать для любого самозагружаемого софта, в том числе работающего исключительно в RM и на древних процах (я гарантирую, что в коде загрузчиков используются инструкции только из набора i8086).
Цитата:
Пусть так. А Int 18 в данном случае чем мешает?
Не хочу пугать пользователя угрожающим сообщением BIOS (обычно выводимым после прохождения всех устройств в загрузочной цепочке).
Цитата:
Вооот, видишь - пошли искусственные ограничения :). Ещё одно не упомянутое ограничение - не загрузишься со скрытого раздела. В моей архитектуре этих ограничений нет.
Я не говорю, что твой подход плохой. Просто хочу отметить, что в каждом случае есть свои достоинства и недостатки и мой подход вполне имеет право на жизнь.
Всем бы такие искусственные ограничения, жить бы стало проще :) Скрытые разделы 1x обрабатываются, хотя винды все равно будут ругаться при загрузке с таких разделов. Не обрабатываются только разделы восстановления. Кстати мой EBR-загрузчик будет нормально обрабатывать даже некорректные значения поля HiddenSectors (испорченные левыми утилитами типа boot.exe :) ), т.к. я выполняю корректировку на основе реального местоположения раздела на диске.
Цитата:
phantom-84 писал(а):
Может, ты имел в виду, что вписываешь копию EBR-загрузчика в каждый вложенный расширенный раздел?
Да.
В цикле обрабатывать вложенные разделы не намного сложнее, а преимуществ от использования только одного экземпляра EBR-загрузчика на весь расширенный раздел много.
pavia писал(а):
Так стандартов нет, есть специфичные вещи.
OK, как раз поэтому и приходится подстраиваться под то, как себя ведут существующие системы, дисковые утилиты и т.п.
Цитата:
Если win 98 поддерживал разделы 5h 0fh, то winxp и win Vista не факт. WinXP хранит настройки на первом логическом диске. В Win Vista как раз для загрузки отвели первый раздел в несколько сот мегабайт.
pavia, или ты неправильно выразился, или владеешь недостоверной информацией. В Win2K/XP и в Windows Vista/Seven используются разные загрузчики, но они могут размещаться на любых разделах (не только первичных, но и дополнительных). А то, о чем ты говоришь, сильно смахивает на кривую разметку с "СИСТЕМНЫМ РАЗДЕЛОМ" в 100 мег, которую пытаются навязать установщики Vista/Seven и которую легко обходят вменяемые сисадмины прямо в установщике. Я обычно устанавливаю отдельный экземпляр "родного" для системы вторичного загрузчика для каждого экземпляра системы, причем на одном разделе (это относится и к линуху). А выбор запуска цепочки "первичный загрузчик - вторичный загрузчик - соответствующая система" выполняю прямо в MBR. Линуксовые загрузчики сейчас выношу из MBR в начало какого-либо раздела (если не использую их, как основные), но готовится MBR-загрузчик Alter-3, который позволит запускать их из произвольного сектора диска (пока только при альтернативной загрузке, а потом посмотрим).
Yoda писал(а):
phantom-84 писал(а):
Как раз в случае отсутствия активного раздела нужно вызывать int 18h без вывода каких-либо сообщений и ожидания.
Не согласен с отсутствием сообщений и ожидания. Предпринята попытка загрузиться с незагружаемого носителя, - пользователь должен быть уведомлён, что он не загружаем.
Т.е. нам опять наплевать на реальное положение вещей и здравый смысл! Когда нет ни одного активного раздела на текущем диске, это означает, что в соответствии с принципами BIOS (в отличии от физического диска будет трудновато убрать из загрузочной цепочки или попросту выдернуть отдельный раздел диска, поэтому в этом случае снимают его флаг активности) нужно МОЛЧА обращаться к следующему диску в загрузочной цепочке с целью поиска загрузочного раздела на нем. Я вношу коррективы в эти правила, не нарушая основных принципов:
- перехват при альтернативной загрузке, если альтернативный загрузочный раздел для данного диска определен;
- при использовании Jumbo (и в перспективе Alter-3) при отсутствии активного первичного раздела на диске выполняется поиск "активного" дополнительного раздела и только в том случае, если не найдено ни того, ни другого, управление возвращается BIOS.
Yoda писал(а):
Вообще, конечно, свинство, что изначально не предусмотрена стандартизованная передача от MBR начала раздела.
Она существует, но, как pavia верно заметил, о реальной стандартизации речи не идет, поэтому и гарантий очень мало. Моя расширенная загрузочная сигнатура гарантирует в том числе и корректность тех параметров, которые раньше было использовать слишком рискованно (поэтому их практически никто и не использовал).