СПО / Справочный материал / диск_структ_рус
.doc1.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];