Определение физического расположения загрузочного раздела

Тема в разделе "WASM.BEGINNERS", создана пользователем anatolymik, 24 дек 2009.

  1. anatolymik

    anatolymik New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2009
    Сообщения:
    62
    Привет ребята!

    Мне нужно по букве раздела определить его физ. расположение. т.е.
    вот такое multi(0)disk(0)rdisk(0)partition(1)
     
  2. dendi

    dendi New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    233
    GetWindowsDirectory и парсить boot.ini.
     
  3. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    dendi
    шо за бред ты сейчас сказал?
     
  4. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    SPA
    +1

    Зача решается через SetupAPI. Готового исходника нет, но логика следующая:
    1. Перечисляем с помощью вышеназванных API все PCI устройства в поисках дискового контроллера по class id.
    2. Перечисляем все накопители, которые висят на конкретном контроллере (опять же, SetupAPI это всё умеет).
    3. Для каждого накопителя опрашиваем диспетчер разделов о точках монтирования (см. IOCTL_MOUNTMGR_*** в DDK), сравнивая букву раздела с той, которую отдаёт GetWindowsDirectory.
    4. Когда путь совпал - первая цифра это номер канала контроллера, вторая - номер устройства на канале, третья - номер раздела.

    Собственно, квест выполнен.
     
  5. Egleria

    Egleria Алиса

    Публикаций:
    0
    Регистрация:
    23 дек 2009
    Сообщения:
    6
    Адрес:
    Новосибирск
    multi(0)disk(0)rdisk(0)partition(1) - это первый раздел диска, обычно являющийся загрузочным. Разбираем таблицу разделов, находящуюся в
    1) 0:0:1
    2) ???????
    3) PROFIT! -)
     
  6. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Вообще-то буквы в Винде никак не привязаны к разделам и физическим накопителям: их можно свободно (ну, почти свободно) менять. Поэтому опираться на таблицу разделов попросту нельзя.
     
  7. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    У меня лично было два физ-диска и через БИОС то один был первым, то второй. Ну а с буквами я вообще давно уже обращаюсь "свободно". Даже умудрялся без диска С жить и очень долгое время первый раздел имел букву С. Буква С для системного диска у меня - это исключение.
    Ну а если еще и Линукс стоит, то там букв нет!
    Что касается привязки букв и разделов, то тут все нормально. В реестре есть раздел MountedDevices - там гораздо больше можно найти : какая буква куда была привязана. Вынули хард, а там все осталось... Даже если букву заняли под другое - таблица разделов хранится.
    А если достать время записи параметра, то можно историю узнать.
     
  8. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Блин РЕДАКТИРОВАНИЕ !!! - первый раздел естественно был R (read only), там сидел ДОС для ремонта систем.
     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    И вообще я не понял : зачем по букве определять ? Что мало утилит для чтения таблицы разделов?
    Я обычно использую Мой компьютер(правый клик)->Управление->Управление дисками
    Там вам в графике покажут буквы и разделы. Если разделы делали нормально, то все легко определяется : 1,2,3 и т.д. Раньше приходилось Парагон вызывать, но один добрый человек подсказал про "правый клик" - удобнА :)
     
  10. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Пардон меня уже в оффтопик занесло. Надо же программно пределить, видимо. Но все равно непонятно про буквы?