Загрузка файла в файловой системе ISO 9660 - PullRequest
4 голосов
/ 16 марта 2012

Я только что закончил читать эту статью о чтении файлов в файловой системе ISO 9660, и я не совсем понимаю, как мне поступить с чтением файла в память. Я понимаю, что корневой каталог находится по смещению 156 PVD, как бы я использовал его, чтобы найти файл, который находится в корневом каталоге, и как только я найду имя файла, как мне найти адрес, на котором находится файл, чтобы я мог загрузить его в память (используя int 0x13 AH = 42)?

1 Ответ

7 голосов
/ 16 марта 2012

BIOS может не обеспечить прямой доступ к дисководам компакт-дисков через int 13h, напрямую с дискетами и жесткими дисками всегда можно получить доступ через int 13h. Если вы загружаетесь с компакт-диска (если ваш BIOS поддерживает это), вы можете использовать int 13h для доступа к компакт-диску, но тогда единственный вариант, который гарантированно будет работать, - это режим эмуляции, в котором вы будете иметь доступ не ко всему компакт-диску , но загрузочный образ, как если бы это был FDD или HDD (в этом случае BIOS обычно назначает номер диска 0 или 80h эмулируемому диску AKA A: и C:). Здесь обсуждается эта проблема здесь .

Возможно, вам понадобится написать драйвер CD для чтения данных с него напрямую через порты ввода / вывода.

Что касается ISO9660, вам нужно прочитать Directory entry for the root directory с Primary Volume Descriptor (что по смещению 156). Тогда вас интересуют Location of extent (LBA) (смещение 2) и Data length (size of extent) (смещение 10) от Directory entry for the root directory. Они сообщают вам, где находятся данные каталога (список файлов / каталогов) и насколько они велики.

Этот список является в основном списком тех же самых записей каталога, которые имеют переменную длину (из-за переменной длины файла / имени каталога и заполнения). Когда вы читаете его, вам нужно просмотреть File flags каждой записи, чтобы определить, является ли это файл или каталог. Если это каталог, и вы хотите получить к нему доступ, вы повторяете всю процедуру рекурсивно. Если это файл, Location of extent (LBA) (смещение 2) и Data length (size of extent) (смещение 10) сообщают вам, где он находится и насколько он велик.

Надеюсь, я не испортил это, так как у меня нет под рукой старого кода CD.

О, и имейте в виду, выше приведено очень упрощенное описание того, как вам следует читать CD, большинство CD, но не все. FS является излишне общим и сложным, и в нем много функций и опций, которые затрудняют его правильное чтение в любых ситуациях.

Я предлагаю вам получить несколько .iso файлов, шестнадцатеричный редактор и калькулятор, перепроверить логику и лучше ознакомиться с файловой системой.

...