Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СПО / Справочный материал / диск_структ_рус

.doc
Скачиваний:
16
Добавлен:
03.03.2016
Размер:
36.86 Кб
Скачать

1.4. Основные структуры, необходимые

для работы с жестким диском

Размеры переменных стандартных типов –

CHAR 1 байт

INT 2 байта

1.4.1.Структура Partition table

struct PartTable

{unsigned char priz; //признак раздела

//активный(80h)/неактивный(0)

char head_b; //начальная головка раздела (вторичного

//MBR, если раздел расширенный)

unsigned int track_b; //начальные дорожка и сектор раздела

//(вторичного MBR если раздел расширенный)

//в формате cccccccc CcSsssss

//С- дорожка(цилиндр) S-сектор

unsigned char s_code; //код системы

// 0-Неизвестный

// 1-Обычный DOS с FAT12

// 2-XENIX

// 3-XENIX

// 4-Обычный DOS c FAT16

// 5-Расширенный DOS

// 6-BigDOS 32Mb-2.3Gb

// 7-HPFS

// 8-Split

//0xB,-0xC Раздел с FAT32

//0xE-BigDos для WINDOWS 9x

//0xF-Расширенный раздел для WINDOWS 9x

char head_e; //конечная головка раздела

unsigned int track_e; //коннечные дорожка и сектор раздела

long StartSector; //Относительный номер начального сектора

//раздела

long size; //размер раздела в секторах

};

1.4.2. Структура MBR

struct

{char reserved[0x1be]; //код загрузчика MBR

struct PartTable PT[4]; //Описатели Partition Table

char signature[2]; //Cигнатура MBR (0x55AA)

}MBR;

1.4.3.Структура BOOT-сектора

struct

{char JMPCODE[3]; //JMP на код загрузчика

char OS[8]; //название ОС, под которой форматировался

//диск

unsigned int bpersect; //Байт в секторе

unsigned char sperclust; //Секторов в кластере

unsigned int reservsect; //Кол-во зарезервированных секторов

unsigned char numFAT; //Кол-во копий FAT

unsigned int maxDirEntry; //Кол-во элементов корневого каталога

unsigned int SmallSize; //Размер в секторах(для диска <32Mb)

char MediaDescriptor; //Описатель среды

unsigned int sectinFAT16; //Кол-во секторов,занимаемых FAT

//(для FAT12, FAT16) Для FAT32 - резерв

unsigned int sectpertrack; //Секторов на дорожке

unsigned int heads; //Кол-во головок

long HiddenSect; //Кол-во скрытых секторов

long int size; //Размер в секторах для диска >32Mb

//Для FAT32 - резерв

unsigned int sectinFAT32; //Для FAT32- кол-во секторов,занимаемых FAT

//Для FAT12, FAT16 старший байт -резерв,

//младший байт - тип устройства (для

//пеpвого диска в системе =80h,

// для остальных - 0)

union

{struct //Для FAT12 FAT16

{char Sign; //Сигнатура 29h '(',показывает наличие в

//BOOT-секторе инвормации из extBPB

long SerNum; //Серийный номер диска

char Label[11]; //Метка диска

char fatID1[8]; //Идентификатор FAT ('FAT12 ' или 'FAT16 ')

char CODE[0x1C2]; //Код загрузчика

}F16;

struct //Для FAT32

{char reserv1[6]; //резерв

long startclust; //Начальный кластер корня

int BegFS; //Начальный сектор FS (обычно=1)

int BootCopy; //Номер сектора c копией BOOT

char reserv2[12]; //резерв

char PhysNum; //Физический номер устройства

char reserv3; //резерв

char ExtSign; //Расширенная сигнатура

long SerNum; //Серийный номер диска

char Label[11]; //Метка диска

char fatID2[8]; //Идентификатор FAT ('FAT32 ')

char reserv6[0x1A6]; //Код загрузчика

}F32;

}FAT16orFAT32;

}BOOT;

1.4.4.Структура элемента каталога

struct DirEntry

{unsigned char fn; //признак

//fn= 0-пустой

//fn=0xE5-удален

//другой код - первая буква имени

char Name[7]; //остальные 7 символов имени

char ext[3]; //расширение

char attr; //поле атрибутов

char reserv[8]; //резерв

unsigned int extclust; //Для FAT32- старшая часть номера

//первого кластера.

//Для FAT12 FAT16- резерв

int time; //Время последней модификации файла

//в упакованном формате

int date //Дата последней модификации файла

//в упакованном формате

unsigned int begclust; //Номер первого кластера (для FAT32

//только младшая часть)

long size; //Размер файла в байтах

};

Для стандартного сектора в 512 байт 1 сектор каталога описывается так:

struct DirEntry ROOT[16];