Показать сообщение отдельно
Старый 04.12.2017, 11:43   #1 (Ссылка на пост)
VoVaN
Si vis pacem, para bellum
 
Аватар для VoVaN
Пол:
 
Активность Longevity
2/20 16/20
Today Сообщения
0/5 ssss15340
Адрес: Херсон
Благодарил(а): 9,964
Благодарили 31,498 раз в 8,874 постах
Галерея: 0
Вес репутации: 345 VoVaN скоро в модераторыVoVaN скоро в модераторыVoVaN скоро в модераторы
VoVaN скоро в модераторыVoVaN скоро в модераторыVoVaN скоро в модераторыVoVaN скоро в модераторыVoVaN скоро в модераторыVoVaN скоро в модераторыVoVaN скоро в модераторыVoVaN скоро в модераторы
Загальні запитання

Колупаю зараз драйвер Fat32. Щось він некоректно читає деякі накопичувачі, зокрема ЮСБ-флешку, форматовану віндамисьомими.

По порядку.
Драйвер читає MBR та намагається інтерпретувати. Знаходить записи щодо розділів:
Цитата:
00000000000000000000000000000000 - немає
00020300051468EC80000000809F7800 - є
00000000000000000000000000000000 - немає
00000000000000000000000000000000 - немає
Далі розбирає запис 00020300051468EC80000000809F7800.
І на цьому етапі трапляється якесь фіаско. А саме - параметр початкового LBA розділу (@ 0x1D6). Тут він дорівнює 0x80 або 128 dec.
Название:  wh0.png
Просмотров: 383

Размер:  10.5 Кбайт
(с) WinHEX

Початковий сектор же в нас насправді 0х100 або 256 dec. І WinHEX цю магію вміє.
Название:  wh1.png
Просмотров: 385

Размер:  9.6 Кбайт

Драйвер чомусь вважає що номер першого сектору розділу тотожний початковому LBA (я донедавна теж так вважав. Та навіть сам WinHEX називає це "Sectors preceding partition". WTF?!) та шукає файлову таблицю у секторі 0х80, хоча насправді вона лежить за адресою 0х100. І так, якщо просто зсунути число на один розряд вліво (чи домножити на два) все працює вірно. Але очевидно що додатково множити на константу - то є скажений костиль і так робити не можна. Я підозрюю що там має бути не константа А якесь число яке звідкись береться.
Я ХЗ, чи то якась нова специфікація яку ми з цим драйвером не знаємо, чи то що.
Хто знає?

* * *

Все, розібрався. Треба було одразу звернути увагу на ідентифікатор типу розділу, який 0х05 замість очікуваного 0х0В. Тобто падлюча вінда замість того щоб зробити просто первинний розділ з ФАТом, робить логічний розділ за адресою 0х80, у якому розміщає таблицю з вказівником на єдиний розділ з ФАТом за адресою 0х80 від початку цього розділу (а не у абсолютних координатах), тобто насправді 0х80+0х80 = 0х100.*
Р - Раціоналізаторство. А драйвер маленький і не може у логічні розділи. Доведеться додати в нього трішечки магічної рекурсії.
От як правильно задане запитання допомагає знайти відповідь

* - і це черговий раз демонструє, чому у жодному разі не можна використовувати костилі які надають просте рішення проблеми, суть якої наразі не зрозуміла.

ПС
Пропоную тему залишити відкритою та приліпити щоб мені було соромно що я одразу не подумав про логічні розділи не плодити теми задля одноразових запитань.
__________________
У світі багато брудного й заразного,
Але той хто хоче - лишається чистим.

Последний раз редактировалось VoVaN, 04.12.2017 в 13:47. Причина: https://en.wikipedia.org/wiki/Partition_type
VoVaN вне форума  
Ответить с цитированием
Сказали Спасибо пользователю VoVaN за этот пост:
Davlat (04.12.2017)