Алгоритм - Учебный центр
Заполните форму ниже! Мы вам перезвоним!

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


Работа с HDD на уровне LBA используя возможности функций BIOS INT 13(42/43).

 

Работа c HDD на уровне LBA используя возможности функций BIOS

INT 13(42/43).

С помощью простенькой программы (рис. 1) мы можем прочитать в оперативную память (в буфер с адреса 240) любой сектор любого жесткого диска (MBR или GPT), но адресация порций файлов производится с помощью кластеров, а программа использует адресацию LBA. Поэтому нужно уметь переводить номер нужного кластера в номер начального сектора этого кластера и знать размер кластера.

Рис. 1

Разделы FAT12/16 состоят из системных областей (Boot-сектор, FAT1, FAT2, каталог) и области данных (состоящей из кластеров пронумерованных с номера 2).

Разделы FAT32состоят из системных областей (область резервных секторов, содержащая Boot-сектор и FSINFO, и FAT1, FAT2), и области данных (состоящей из кластеров пронумерованных с номера 2). Корневой каталог в FAT32 расположен в области данных.

Разделы NTFS состоят из кластеров пронумерованных с номера 0, вся информация в разделе (метафайлы, каталоги, программы, данные ...) — все хранится в виде файлов.

Принципы организации хранения информации в виде файлов в разделах FAT :

 

Принципы организации хранения информации в виде файлов в разделах NTFS:

 

Пример пересчета номера кластера (5 кластер) в номер сектора (размер кластера 2 сектора) для FAT32 показан на рис. 2:

 

Рис. 2

Размер области резервных секторов, содержащей Boot-сектор и FSINFO, и размер FAT1, FAT2 (в секторах)указан в Boot-секторе (номер начального кластера корневого каталога тоже указан в Boot-секторе), а адрес Boot-сектора (начальный сектор раздела) указан в соответствующей строке таблицы разделов в MBR. Используя эту информацию легко найти начальный сектор области данных раздела (номер начального сектора кластера 2 (на рис. 2 это сектор 104). Допустим нам нужен номер нач. сектора 5-го кластера, который является начальным кластером файла корневого каталога.

Номер нач. сектора 5-го кластера = (5 - 2) х 2 + 104 = 10А. Из номера искомого кластера вычитаем 2 т. к. нумерация кластеров начинается с номера 2. Полученное число умножаем на количество секторов в кластере (2) и результат прибавляем к номеру начального сектора области данных раздела (104). Получили номер начального сектора 5-го кластера равный 10А.

Пример пересчета номера кластера (5 кластер) в номер сектора (размер кластера 2 сектора) для раздела NTFS:

 

Рис. 3

Адрес Boot-сектора (начальный сектор раздела 100) указан в соответствующей строке таблицы разделов в MBR.

В разделе NTFS в LBA 100 находится Boot-сектор раздела, а в нем по адресу 30 от начала 8 байтов содержат номер начального кластера файла $MFT (напримерравный 5).

Номер нач. сектора 5-го кластера = (5 х 2) + 100 = 10А. Номер нужного кластера умножаем на размер кластера (2) и полученный результат прибавляем к номеру начального сектора раздела (100).  


Лицензия