
- •Лабораторна робота №3
- •1.Сканування жорсткого диску на предмет пошуку логічних розділів.
- •2.Алгоритм іменування дисків
- •2.1 Пошук завантажувальних або потенційно завантажувальних дисків
- •2.3 Пошук й найменування логічних дисків у розширеному розділі
- •2.4 Іменування логічних дисків, що залишилися, в основних розділах.
- •2.5 Іменування логічних дисків в ос Windows nt
- •3.Контрольні запитання.
- •4.Завдання.
Лабораторна робота №3
Сканування жорсткого диску на предмет пошуку логічних розділів
Мета лабораторної роботи- дослідження структури першого завантажувального сектора (MBR), та алгоритму іменування логічних дисків.
1.Сканування жорсткого диску на предмет пошуку логічних розділів.
Вся інформація, необхідна для початкового завантаження ОС, перебуває в першому секторі жорсткого диска. Ця інформація називається головним записом завантаження — MBR(Master Boot Record). Структура MBR наведена у таблиці 1.1..
Таблиця 1.1 Структура MBR
-
Зсув
Довжина
Опис
000h
446
Код завантажника
1BEh
64
Таблиця розділів
1BEh
16
Розділ 1
1CEh
16
Розділ 2
1DEh
16
Розділ 3
1EEh
16
Розділ 4
1FEh
2
Сигнатура 55ААh
MBR розташована на початку жорсткого диску за фізичною адресою 0-голівка, 0-доріжка, 1- сектор. При використанні абсолютної адреси номер сектора , за яким розташовано MBR дорівнює нулю. Код читання MBR представлений нижче
//опис шаблону пакета
struct paket{
byte size; //розмір пакету
byte reserw; //резерв
word anzahl; //кількість секторів для читання/запису
dword buf; //буфер, у який здійснюється читання/запис
dword ml; //молодша частина адреси по якій здійснюється читання/запис
dword st; //старша частина адреси по якій здійснюється читання/запис
} Paket;
//ініціалізація елементів пакету
Paket.size=0x10; //розмір пакету дорівнює 16 байтам
Paket.reserw=0; //резерв 0
Paket.anzahl=1; //читаємо один сектор
Paket.buf=(dword)((struct mbr far*)(MBR)); //читаємо у перемінну MBR
Paket.ml=sektor; //sektor = 0
Paket.st=0;
//ініціалізація вхідних параметрів для INT13(читання даних)
_DS=FP_SEG((struct paket far*)(&Paket)); //в DS записуємо сегмент пакета
_SI=FP_OFF((struct paket far*)(&Paket)); //SI записуємо зсув пакета
_AH=0x42; //AH записуємо код функції
_DL=drive; //DL номер жорсткого диску(80h,81h …)
geninterrupt(0x13); //виклик int13h
if(_FLAGS&0x0001)//перевірка на наявність
//Помилка //помилок
}
//Продовження основної програми
Структура MBR містить чотири розділи Partition Table (PT), отже на одному жорсткому диску може бути розташовано до чотирьох основних розділів, один із яких може бути завантажувальним. Якщо розділ є завантажувальним, то розміщений на ньому логічний диск повинен містити готову до роботи копію операційної системи, якій буде передане керування при завантаженні комп'ютера з жорсткого диску. СтруктураPartition Table наведена у таблиці 1.2.
Таблиця 1.2 Структура елемента Partition Table
Зсув |
Довжина(байт) |
Опис |
00h |
1 |
Ознака активності розділу |
01h |
1 |
Початок розділу - голівка |
02h |
1 |
Початок розділу - сектор (біти 0-5), доріжка (біти 6,7) |
03h |
1 |
Початок розділу - доріжка |
04h |
1 |
Код типу розділу |
05h |
1 |
Кінець розділу - голівка |
06h |
1 |
Кінець розділу - сектор (біти 0-5), доріжка (біти 6,7) |
07h |
1 |
Кінець розділу - доріжка |
08h |
4 |
Відносний номер першого сектору розділу |
0Ch |
4 |
Кількість секторів розділу |
У межах основного розділу може розміщатися тільки один логічний диск. Якщо чотирьох розділів не досить для конфігурування системи, використовується розширений розділ. Розширений розділ може містити кілька логічних дисків.