как отличить mbr от BR

Тема в разделе "WASM.OS.DEVEL", создана пользователем abcd008, 23 мар 2011.

  1. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    проверил. fdisk не дает создать активный раздел на диске отличном от первого(80h). хотя уже отмеченные определяет.
    вывод: раз нельзя сделать активным диск отличный от 80. то и значение будет только 80. если конечно не пользоваться другими утилитами. хотя я всегда и на всех компах которые у меня были видел только 80 и все.
     
  2. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    В ХП первый круг проверки что-то типа

    cmp @РегУказателя, Регистр_в_котором_ноль
    jL (Есть знак) на второй цикл
    jNE (Не равно) на ошибку.
    Циклим
    Возвращаем управление в BIOS.

    Во втором цикле, сравнивают только на ноль, и при отличии сваливают на ошибку.

    То есть значения:
    0x01..0x7F - ошибочны.
    0x80..0xFF - верны, и указывают на загрузочный раздел.

    Я думаю, более правильно отдать управление в BIOS, и уж он пусть решает, что делать, если вы пишите код собственного обработчика MBR.
     
  3. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    да для совместимости последую вашим путем. но только как писал:

    0-7fh-не активный
    80h-ffh-активный.
    по честному и без ошибок)
     
  4. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    проверил сама винда на значения 0-7fh реагирует нормально. это только mbr не врубается)
     
  5. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Верное замечание. Но неактивный раздел идентифицируется нулевым значением данного поля. Так уж сложилось )))
     
  6. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    не прав винда понимает. предыдущий пост
     
  7. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    это с целью упростить условие проверки в mbr)
    они иногда после rep
    пишут cmp [si],ch (где вместо 0 написано ch)
    экономят место) было бы написано 80h
    было бы наоборот 0-7fh не активный
    80h-активный ,а 81-ffh ошибка)))
     
  8. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    И что? Моя ось тоже понимает. Менеджер томов выцепил первый активный раздел, а все остальные посчитал автоматически неактивными. А для детекта разделов, как уже говорил, я не использую данное поле, хотя может и зря.
     
  9. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    лучше считать что несколько активных.
    тогда бут менеджер будет и без файла boot.txt(например) знать где есть системы.
    хоть он и не знает какие, но сможет предложить загрузку по выбору)

    а в системе детект я делаю по значению переданному в ds:si. и номеру диска dl.
    тогда можно пройти по цепочке(заглянув и в расширенные) разделы и найти соответствующий раздел(хотя при загрузке ты и так будешь знать начало и конец раздела(только его номер узнать надо))

    просто искать первый активный не правильно. вдруг тебя загрузили через менеджер а не через alter? и ты подумаешь что ты в другом разделе? так)

    плюс должна быть возможность делать активным расширенный раздел, а в нем в smbr еще один который загрузится по цепочке.

    вот это я считаю идеально правильным. а не кривые условия противоречащие сами себе)
     
  10. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Это в терминах BIOS обычно называется USB-ZIP.
    Я так понимаю, тебе это нужно из внешней программы, а не в коде загрузчика на этой флешке.
    И если правильно поставить вопрос, тебя интересует, присутствует ли на этой флешке таблица разделов, то есть она HDD, или нет (FDD). Я правильно понял?

    Если я прав, и вопрос звучит именно так, то вопрос сводится, есть ли на флешке ТР, или ее нет, а точнее корректна она или нет.

    Смотришь, есть ли 55AA в нулевом секторе. Если нет, то мусор там. И на твой флешке нет ни MBR ни BR, говоря твоими терминами. Больше никаких гарантированных способов нет.

    Можно только по косвенным признакам.
    1) Проверяешь флаг активности (+00). Не более одного 0x80, остальные нули.
    2) Проверяешь трансляцию CHS в LBA для каждого раздела, должна совпадать. Но не факт, что ты вычислишь геометрию флешки, виста и семерка может подложить сюрприз.
    3) Проверяешь, что живет в первом секторе каждого раздела. А именно наличие 55AA в конце. Для FAT/FAT32/NTFS это сработает. Для EXT2 пробуй, у меня живет в одном.
    4) Можно попробовать отлавливать дополнительно характерные для FS признаки.

    Но ты так и не ответил зачем тебе это. Просто знание о наличии ПТ на фиг не нужно.
     
  11. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Ты не спорь, а слушай, что тебе более умные товарищи говорят, тем более, что они правы.

    Это вопрос вообще, или в частности? В частности, значения 0x01-0x7F ошибочны, и существовать не могут.

    Не сможет.

    LOL ;) А что ты в DS:SI передаешь?

    Вот тут http://www.wasm.ru/forum/viewtopic.php?id=40548&p=2
    Пост № 37, предпоследний абзац.
     
  12. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    здесь ты прав во всем. только в некоторых биосах до сих пор fdd а не zip)
    но не об этом.

    если я гружусь с флешки то я конечно знаю в каком она формате. ведь я приму параметры и знаю что записано на диске.

    а вот когда система работает и вставили флеху. вот здесь и появляется вопрос как ее смотреть.



    но спасибо, благодаря тебе я вспомнил, что дискеты обычно все(других не видел даже в линуксе),
    отформатированы в fat(пусть и не 12).

    тогда вот: проверяем на 55aa. если есть то это или mbr или br.
    следовательно если это дискета то она в формате fat(другого не дано) . тогда проверяем на присутствие fat.(можно по разному, но легко).
    и если это fat то диск fdd.
    а если нет то это hdd с таблицей PT)))

    ВОТ ОНО....УРА. если что поправьте..
    хотя я слышал что бывают dual дискеты, но предполагаю что там разделы совпадают и для fdd и для hdd.



    насчет корректных значений chs в соответствии с lba. я обычно в chs пишу ffffffh(как в uefi спецификации), а если надо, то получаю chs из lba в соответствии с (текущей) геометрией (int 13h функция 8)


    да и винда не понимает когда на флешке несколько разделов, она видит только первый((
     
  13. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    BIG FDD MODE флешка с NTFS или EXT2.
    Поправляю, и тонко намекаю, что это не ОНО, и не УРЯ.
     
  14. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    посмотрел и не понял к чему) и не надо судить о всех мол если спросил то глуп. это в целях совместимоти.
    и чтоб придти к единому мнению. тита конференция) если работают в MS это не значит что умнее всех.
    у меня много знакомых программистов. которые исправляют баги после гигантов ранка софта.

    я не спорю я проверил.


    они могут существовать и прекрасно перевариваются виндой.
    кcтати dos тоже писали умные люди из MS а там понимают только 0 и 80h.



    если как фантом говорит несколько активных можно. то может быть загружен любой из них а не только первый в списке(не зря же он активный).
    а система тогда не должна полагаться на первый активный флаг(если сама допускает несколько активных разделов)
    это типа дал дорогу в mbr поддержи и дальше.



    в ds:si передается указатель на описание активного раздела(как в PT). без этого кстати твоя Умная MS windows не запустится(проверено не один раз и не только мной).
     
  15. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Вот тут то и добрались до истины :)
    Тут же все на порядок проще. Достаточно только вспомнить про многоуровневую модель взаимодействия.
    И твои волосы тут же становятся гладкими и шелковистыми.
     
  16. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Ага, а еще благодаря своему ИИ сам определить нужный активный раздел при автозагрузке )))

    Ага, а если ты загружаешься с цельного устройства, то BIOS уж не знаю благодаря чему определит необходимость передачи твоему коду этого указателя )))

    У меня ядро (и первичный загрузчик при использовании Alter'а) получает номер загрузочного раздела в регистре DH. Если его значение равно нулю, то считается, что загрузка выполнялась либо с цельного устройства, либо с активного раздела. Для загрузки с вложенного в расширенный раздел раздела можно использовать Jumbo (он автоматически исправляет начальный адрес раздела в дескрипторе внутри расширенном разделе типа 5 и в поле HiddenSectors FAT/NTFS-томов) или в перспективе вторичный загрузчик.

    "Меня" могут грузить только сторонние загрузчики, которые знают о моем загрузочном интерфейсе. Если "меня" загружают через мой первичный загрузчик, не зная, что он также способен воспринимать номер загрузочного раздела, то должны это делать только с цельного устройства/активного раздела, иначе ядро не сможет нормально выполнить загрузку системы, если ему не подложить какой-нибудь продвинутый драйвер.

    Не нужно делать расширенный раздел активным ))) Я спокойно идентифицирую загрузочный раздел внутри расширенного по его номеру > 4.

    Каждый вправе самовыражаться, как хочет )))
     
  17. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    :dntknw:
    а BIG FDD без PT?
    если их всего fat ntfs и ext2/3 то это без проблем. я их умею детектить.
    да еще exfat появился. но если бывают и фругие форматы на флешке, то я не знаю.
    хотя мне раньше утверждали что если размер флешки меньше скольки-то, то это fdd иначе hdd. так ли это?
     
  18. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Что-то я сильно сомневаюсь, что винда использует этот указатель.
     
  19. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    Ага, а если ты загружаешься с цельного устройства, то BIOS уж не знаю благодаря чему определит необходимость передачи твоему коду этого указателя )))

    -ds:si передает только mbr а не bios. это описано в uefi и boot bios спецификации.
    когда ты записываешь систему она знает на каком она диске. у нее спецефичный BR.


    Не нужно делать расширенный раздел активным ))) Я спокойно идентифицирую загрузочный раздел внутри расширенного по его номеру > 4.

    -а в mbr ты тупо сканируешь все разделы включая расширенные? или откуда ты взял 4.
    проще наверно отметить расширеный как активный и тем дать понять что там есть загрузочный раздел)

    иначе зачем ты допускаешь несколько (больше одного) активного раздела? если потом сам не можешь с ними работать(они вводят тебя в заблуждение).


    можешь не соглашаться но я по своему прав. я понимаю что ты придержался подобию загрузки linux.
    но у них место загрузки прописывается в файле конфигурации grub.
     
  20. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Это BIOS-специфично. Плюс нужны определенные настройки в BIOS Setup.