Определение загрузочного устройства.

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

  1. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Вопрос вроде уже поднимался, но ответа я так и не увидел.
    Как узнать, с какого устройства производится загрузка, например в BOOT секторе, если точно известно, доверять коду переданному в DL нельзя.
     
  2. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Никак. Почему нельзя доверять коду, переданному в DL? Глючные в этом плане BIOS попадаются достаточно редко. Тогда нужно пропатчивать MBR-загрузчик. А в BPB соответствующее поле предусмотрено изначально - в него только нужно поместить актуальное значение.
     
  3. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Потому, что не известно, кто будет сидеть в MBR. И не известно, передаст ли он DL полученный от BIOS.
    BPB не показатель. Простейший пример, это флешка, которая может быть как и 0x00, так и 0x80.
    Или CD/DVD-ROM, где еще пара тройка значений добавляется.
     
  4. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    MBR-загрузчики может изначально и случайно но передавали корректное значение в DL. Сейчас они это делают более целенаправленно. Повторяю, что всегда остается возможность пропатчить необходимый загрузчик, но сейчас в этом нет практически никакой необходимости, потому что все работает нормально. Хех, у меня вообще свой "стандарт" на интерфейс между MBR-загрузчиком и первичным загрузчиком раздела (об этом можно прочесть в одной из соседних веток). Я считаю передачу значения в регистре DL типичным поведением любого MBR-загрузчика и BIOS. Даже до того, как я стал использовать свои собственные MBR-загрузчики, ситуация с регистром DL была вполне нормальной. Система спокойно грузилась и на сторонних MBR-загрузчиках. Могу это абсолютно точно утверждать, потому что я определяю источник загрузки именно на основе значения, передаваемого в регистре DL. Сейчас ситуация еще лучше, т.к. с переходом на свои собственные MBR-загрузчики единственным возможным источником возникновения подобных проблем стала BIOS, а с ней сейчас все в порядке. Для повышения уровня надежности в данном направлении можешь тоже использовать мой MBR-загрузчик или сделать свой, гарантирующий трансляцию значения DL от BIOS.
     
  5. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Пользователь может использовать любой загрузчик, который может и не предать DL, навязывание своего загрузчика противоречит Т/З.
    Пользователь может захотеть параллельно поставить еще одну ОС, которая потребует установки собственного загрузчика в МБР, что есть в ТЗ.

    В общем резюмируя. Спросить у BIOS, с какого устройства загрузились, не получится.
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    MisHel64
    Получится. Просто мы тебе не рассказывали. Почитай Boot Bios specification повнимательнее.
     
  7. abcd008

    abcd008 New Member

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

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    abcd008
    Вот только не все операционные системы об этом знают. Это раз.
    А два, написано а посте N5, который вы судя по всему не читали.

    Pavia
    Читал. Пробовал.
    В самой спецификации не нашел, как найти точку входа.
    Ральф Браун осветил этот вопрос, но его алгоритм не нашел точки входа.
    И судя по описанию, 65я функция не подойдет.
    Других умных мыслей нет.
    Может поделитесь алгоритмом, как найти устройство с которого загрузились.
    Пока мысля только одна....
     
  9. abcd008

    abcd008 New Member

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

    а если уже в системе когда работает к примеру свой драйвер. то тут в mbr есль такое поле Disk Signature.
    если твой загрузчик сохранит его (например в регистре) перех запуском твоей ОС, то потом ты сможешь перебором найти диск с Disk Signature. и тот который совпадает-твой)
     
  10. MisHel64

    MisHel64 Member

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

    Который может быть одинаковым на нескольких дисках и равным нулю....
     
  11. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    все загрузчики mbr (свои или чужие) обязаны поддерживать стандарт.
    и по нему в частности не только dl=номер диска
    но там еще есть ссылка на указатель активного раздела ds:si(без этого кстати windows не грузится)

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

    а вообще есть урезанные mbr таких много. они могут грузиться только с проивода 80h.
    а биос в свою очередь имеет функции выбора первого диска(которому будет присвоен номер 80h)
    а раздел наверно догадаешься как найти(по признаку активного раздела(он тоже должен быть только один)), конечно если загрузился без менеджера загрузки(так можно и с расширенного запустить систему)
     
  12. MisHel64

    MisHel64 Member

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

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    я пост читал. а тебе советую вникать что отвечают.
    если нет mbr то биос точно передаст dl. ведь вас пугает только код mbr который его может стереть?
    да и еще почти все биосы загрузочному устройству присваивают либо 80h либо 00h.
    так как диск с которого загрузились биос делает первым(как пишут некоторые C: или A:)
    далее: читаем сектор диска A: -если BR(тому что по адресу 7c00h), то вы загрузились с привода=0.
    иначе привод=80h. можно тоже сравнит(а то флехи бывают без mbr). если равно то привод=80h
    если нет, то смотрим PT и ищем активный раздел(и сравниваем там).

    а можно просто рекурсивно пройти по приводам и сравнить все диски) это правильнее.
     
  14. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    есть еще способ, но он только для дисков с mbr.
    сохрани Disk Signature внутри BR. а потом методом рекурсии скавни все диски на соответствие.
    так кстати делает windows. но правда не в загрузчике, а уже после загрузки дров(чтоб понять какой физический диск,соответствует загрузочному диску)
     
  15. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Не верю.

    Я вникаю, в отличии от вас.

    Не важно , есть MBR или нет MBR, то BIOS действительно передаст Dl загрузчику. А вот загрузчик может и не передать этот код мне. О чем сказано в третьем посте.

    Если говорить "вообще", то это не верная информация. К контексту обсуждения, сейчас это не относится.
    Даже зная, что я загрузился с 0x80 логического устройства, это мне совершенно не скажет с какого именно физического устройства я загрузился. А именно это узнать мне нужно. Наступил на грабли, INT 0x13/0x48 на стенде выдал не верную информацию о портах устройства. И очень не понятно, что оно должно вернуть для флешки....

    Сюрприз. В PT активным может быть помечен активным один раздел, а код для дальнейшей загрузки берется с другого.
    Hint1: Не все загрузчики следуют логике IBM/MicroSofta.
    Hint2: Кроме MsWindows есть более другие ОС.
    Hint3: Кроме того, есть еще бот менеджеры.
    И повторюсь. Не факт, загрузочный раздел, помечен активным, и что загрузочный раздел вообще прописан в MBR, и да же не факт, что MBR вообще есть на этом диске. О чем я уже говорил в 12м посте.

    И находим два диска с одинаковым SIG, причем равным нулю. И с какого я загрузился?
    И какой SIG мне вообще нужно было искать?
    Который я при инсталляции туда записал? Так ни никакой инсталляции у меня в принципе нет. И как быть в случае загрузки с CD-ROMa?
    Даже если так, то где гарантия, что после инсталляции моего кода никто это SIG не менял?

    Вариант, с привязкой к серийному номеру устройства, то же не прокатил. Причем по трем причинам.


    ADD: Вот про бот менеджеры я вообще не подумал..... Если он есть, то узнать с какого устройства загрузился мой код, в общем случае через BIOS вообще не возможно.....
    Но к моему вопросу это не относится, так что вопрос остается в силе.
     
  16. abcd008

    abcd008 New Member

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

    а почему по серийнику не прокатило?

    поделиться не забудь)
     
  17. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    да и disk signature если не ноль, то ее не меняют. а если ты загрузлся с cd. то биос грузит образ (hdd или fdd)
    на место привода 0 или 80h.
    так что разницы нет cd или нет. а если да то твоя программа уже должна знать на какой она болванке
     
  18. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Конечно, не понять. Для этого всего лишь нужно понимать посты собеседника, а это тебе не судьба.
    Объяснять почему, не прокатило по серийнику не буду. Прочтешь ветку, то поймешь.
    Опять твои вымыслы про SIG, опять глупости про 0x00 и 0x80, хотя про это я уже писал.
    Как только ты узнаешь, что есть ОС отличные от Windows и DOS, и что загузочные CD диски могут быть и без режима эмуляции FDD/HDD, (как установочный диск Windows например), ты сам поймешь, почему это глупости и вымыслы.

    2All: Прошу прощения, за флейм с ламером.
    2Moderator: Можно попросить почистить ветку от постов этого начинающего воина, и от моих ответов ему?
     
  19. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    MisHel64
    имхо биос может сказать только с какого девайса был прочитан mbr, но дальше процесс не регламентирован любой фокус любого загрузчика по передаче загрузки испортит всю картину

    простой пример возьмите загрузчик из статьи с руткитсов который грузит ось с винта при том что загузка установлена с флешки или с сиди
     
  20. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    С этим полностью согласен. Как я уже говорил, меня это вполне устроит,
    возможно просто потерялось мое уточнение в информационном мусоре....