Колупаю зараз драйвер Fat32. Щось він некоректно читає деякі накопичувачі, зокрема ЮСБ-флешку, форматовану віндамисьомими.
По порядку.
Драйвер читає MBR та намагається інтерпретувати. Знаходить записи щодо розділів:
Цитата:
00000000000000000000000000000000 - немає
00020300051468EC80000000809F7800 - є
00000000000000000000000000000000 - немає
00000000000000000000000000000000 - немає
|
Далі розбирає запис 00020300051468EC80000000809F7800.
І на цьому етапі трапляється якесь фіаско. А саме - параметр початкового LBA розділу (@ 0x1D6). Тут він дорівнює 0x80 або 128 dec.
(с) WinHEX
Початковий сектор же в нас насправді 0х100 або 256 dec. І WinHEX цю магію вміє.
Драйвер чомусь вважає що номер першого сектору розділу тотожний початковому LBA (я донедавна теж так вважав. Та навіть сам WinHEX називає це "Sectors preceding partition". WTF?!) та шукає файлову таблицю у секторі 0х80, хоча насправді вона лежить за адресою 0х100. І так, якщо просто зсунути число на один розряд вліво (чи домножити на два) все працює вірно. Але очевидно що додатково множити на константу - то є скажений костиль і так робити не можна. Я підозрюю що там має бути не константа
А якесь число яке звідкись береться.
Я ХЗ, чи то якась нова специфікація яку ми з цим драйвером не знаємо, чи то що.
Хто знає?
* * *
Все, розібрався. Треба було одразу звернути увагу на ідентифікатор типу розділу, який 0х05 замість очікуваного 0х0В. Тобто падлюча вінда замість того щоб зробити просто первинний розділ з ФАТом, робить логічний розділ за адресою 0х80, у якому розміщає таблицю з вказівником на єдиний розділ з ФАТом за адресою 0х80 від початку цього розділу (а не у абсолютних координатах), тобто насправді 0х80+0х80 = 0х100.*
Р - Раціоналізаторство. А драйвер маленький і не може у логічні розділи. Доведеться додати в нього трішечки магічної рекурсії.
От як правильно задане запитання допомагає знайти відповідь
* - і це черговий раз демонструє, чому у жодному разі не можна використовувати костилі які надають просте рішення проблеми, суть якої наразі не зрозуміла.
ПС
Пропоную тему залишити відкритою та приліпити щоб
мені було соромно що я одразу не подумав про логічні розділи не плодити теми задля одноразових запитань.