Показать сообщение отдельно
Старый 05.12.2017, 10:02   #8 (Ссылка на пост)
VoVaN
Si vis pacem, para bellum
 
Аватар для VoVaN
Пол:
 
Активность Longevity
3/20 16/20
Today Сообщения
0/5 ssss15341
Адрес: Херсон
Благодарил(а): 9,965
Благодарили 31,503 раз в 8,875 постах
Галерея: 0
Вес репутации: 345 VoVaN скоро в модераторыVoVaN скоро в модераторыVoVaN скоро в модераторы
VoVaN скоро в модераторыVoVaN скоро в модераторыVoVaN скоро в модераторыVoVaN скоро в модераторыVoVaN скоро в модераторыVoVaN скоро в модераторыVoVaN скоро в модераторыVoVaN скоро в модераторы
Post

Нібито патч

ff.c, рядок #3064

Код:
br[i] = pt[PTE_System] ? ld_dword(pt + PTE_StLba) : 0;
замінити на

Код:
switch (pt[PTE_System])
{
case 0: // empty record
	br[i] = 0;
	break;
			
case 0x05: // extended/CHS
	// here must be converter CHS->LBA, but it was fucked off. Because CHS sux!
case 0xF0: // extended/LBA
	bsect = ld_dword(pt + PTE_StLba);
	if (check_fs(fs, bsect) == 2) // I have no partition, but I have something better. Image of partition!
		br[i] = bsect + ld_dword(fs->win + MBR_Table + PTE_StLba);
	else
		br[i] = 0;
	break;
				
case 0x0B: // clearly, FAT
default: // Some other mysterious CHUPACABRA. Let`s leave it alone.
	br[i] = ld_dword(pt + PTE_StLba);
	break;		
}
Це не остаточна версія, а швидке лагодження. Більшість проблем залишилися на місці, але тепер працюють розширені розділи.
По-перше треба уточнити щодо специфікації використання типів 05/F0 та їх адресацій, а також додати конвертор адреси з циліндрів у логічні блоки (але, на скільки я міг помітити, інформація дублюється, то ж у моєму випадку працює і так). По-друге - тут контролюється тільки перший логічний розділ з розширеної таблиці; якщо раптом буде задіяно другий (хто знає цю вінду) - його не побачить, то ж було б непогано додати гілку або цикл (щоправда це викличе складнощі з місцевою реалізацію мульті-партишену). По-третє - насправді існує набагато більше ідентифікаторів типу ФС (в тому числі і сумісних), і варто було б їх теж уміти вірно інтерпретувати. Але це вже інша історія.

ПС
Ні, серйозно, підхід "якщо тип ФС не нуль - значить це ФАТ" - це нормально?!
__________________
У світі багато брудного й заразного,
Але той хто хоче - лишається чистим.
VoVaN вне форума  
Ответить с цитированием