Осторожно компьютерные вирусы

       

Описание формата таблицы разделов


Формат самого первого сектора жесткого диска можно представить следующим образом:

Смещение, байт

Размер, байт

Описание

0



1BEh

Главная загрузочная запись

1BEh

10h

Элемент таблицы разделов диска

1CEh

10h

Элемент таблицы разделов диска

1DEh

10h

Элемент таблицы разделов диска

1EEh

10h

Элемент таблицы разделов диска

1FEh

2

Признак таблицы разделов - значение 0AA55h

Как видно из этой таблицы, байты со смещением от 0 до 1BEh (шестнадцатиричное значение) занимает главная загрузочная запись, то есть программа. Далее идут четыре элемента талицы разделов, причем каждый элемент занимает 10h байт. После таблицы располагаются два байта признака таблицы разделов.

В элементе таблицы раздела записана информация о расположении и размере раздела в секторах, а также о назначении раздела. Формат элемента таблицы раздела представлен ниже:

Смещение, байт

Размер, байт

Описание

0

1

Признак активного раздела:

0              раздел неактивный;

80h          раздел активный

1

1

Номер головки для начального сектора раздела

2

2

Номер сектора и дорожки для начального сектора раздела

4

1

Код операционной системы, которой принадлежит данный раздел:

0              неизвестная система или свободный элемент таблицы разделов;

1, 4          MS-DOS;

5              расширенный раздел MS-DOS

5

1

Номер головки для последнего сектора раздела

6

2

Номер сектора и дорожки для последнего сектора раздела

8

4

Относительный номер сектора начала раздела

0Ch

4

Размер раздела в секторах

Первый байт элемента таблицы раздела содержит признак активного раздела. Если раздел активный, из него будет выполняться загрузка операционной системы. Диск может содержать одновременно несколько активных разделов, которые могут принадлежать разным операционным системам.

Следующие три байта определяют физический адрес на диске начального сектора раздела (который описывает данный элемент раздела).


В байте со смещением 1 записан номер головки начального сектора раздела. В двухбайтовом поле со смещением 2 закодированы номера сектора и дорожки самого первого сектора раздела. При этом биты 0…5 этого поля задают номер сектора, а биты 6…15 - номер дорожки (рис. 6.4).

Рис. 6.4. Формат слова, содержащего номер сектора и номер дорожки
Байт со смещением 4 содержит код операционной системы, создавшей раздел. Операционная система MS-DOS отмечает первичный раздел кодом 1 или 4, расширенный - кодом 5. Для разделов, созданных другими операционными системами, в этом поле будут находиться другие значения.
В байте со смещением 5 и двухбайтовом слове со смещением 6 записаны номер головки, сектора и дорожки последнего раздела. Номер сектора и дорожки хранится в формате, показанном на рис. 6.4.
Последние два поля элемента таблицы разделов имеют длину 4 байта и содержат, соответственно, относительный номер самого первого сектора в разделе (т. е. относительный номер сектора начала раздела) и количество секторов, имеющихся в разделе.
Остановимся подробнее на относительном номере самого первого сектора в разделе.
Значение относительного номера, равное 0, соответствует дорожке 0, головке 0, сектору 1. При увеличении относительного номера сектора вначале увеличивается номер сектора на дорожке, затем номер головки, и, наконец, номер дорожки. Зная номер дорожки, номер сектора на дорожке и номер головки, можно вычислить относительный номер сектора по следующей формуле:
RelSect = (Cyl * Sect * Head) + (Head * Sect) + (Sect - 1)
Здесь Cyl  обозначает номер дорожки, Sect - номер сектора на дорожке, Head - номер головки.
Обычно разделы диска начинаются с четных номеров дорожек, за исключением самого первого раздела. Этот раздел может начинаться с сектора 2 нулевой дорожки (головка 0), так как самый первый сектор диска занят главной загрузочной записью.
Для наглядности мы воспроизвели из 19 тома нашей серии книг “Библиотека системного программиста” пример схемы разеделения жесткого диска на разделы (рис. 6.5).



Рис. 6.5. Пример разделения диска на разделы
Как вы знаете, для создания первичного и расширенного разделов диска используется программа FDISK.EXE, входящая в состав дистрибутива MS-DOS.
Первичный раздел должен быть единственным и активным, он используется как диск С: и из него выполняется загрузка операционной системы. В расширенном разделе программа FDISK.EXE создает логические диски D:, E: и т. д. Расширенный раздел не может быть активным, следовательно, из логических дисков, расположенных в этом разделе, невозможно выполнить загрузку операционной системы.
Если байт кода операционной системы системы имеет значение 5, то в начале соответствующего раздела располагается сектор, содержащий таблицу логических дисков. Эта таблица является расширением таблицы разделов диска, расположенной в самом первом секторе физического диска.
Таблица логических дисков имеет формат, аналогичный таблице разделов диска, но содержит только два элемента. Один из них указывает на первый сектор логического диска MS-DOS, он имеет код системы 1 или 4. Второй элемент может иметь код системы 5 или 0. Если этот код равен 5, то элемент указывает на следующую таблицу логических дисков. Если код системы равен 0, то соответствующий элемент не используется.
Таким образом, таблицы логических дисков связаны в список. Элемент таблицы разделов диска с кодом системы, равным 5, указывает на начало этого списка.
Для таблицы логических дисков имеется отличие в использовании полей границ логических дисков.
Если код системы равен 1 или 4, эти границы вычисляются относительно начала расширенного раздела. Для элемента с кодом системы 5 используется абсолютная адресация (относительно физического начала диска).

Содержание раздела