- •Лабораторна робота №3
- •1.Сканування жорсткого диску на предмет пошуку логічних розділів.
- •2.Алгоритм іменування дисків
- •2.1 Пошук завантажувальних або потенційно завантажувальних дисків
- •2.3 Пошук й найменування логічних дисків у розширеному розділі
- •2.4 Іменування логічних дисків, що залишилися, в основних розділах.
- •2.5 Іменування логічних дисків в ос Windows nt
- •3.Контрольні запитання.
- •4.Завдання.
2.3 Пошук й найменування логічних дисків у розширеному розділі
Наступною частиною алгоритму є пошук і найменування логічних дисків у розширеному розділі. Граф схема цього участку алгоритму приведена на рис 1.3.

рис 1.3 Граф схема алгоритму пошуку та іменування логічних дисків у розширеному розділі
Для пошуку й найменування логічних дисків у розширеному розділі для кожного жорсткого диска виконуємо наступні дії.:
- Організуємо цикл по перегляду елементів PT на предмет пошуку розширеного розділу (код системи 05hабо 0Fhблоки 1-5). Якщо такий елемент знайдений , уміст поля відносної адреси цього елемента PT запам'ятовуємо як початок розширеного розділу на аналізованому жорсткому диску. Установлюємо адресу першої вторинної MBR рівну адресі початку розширеного розділу (ADR_BEG_EXP), й по даній адресі читаємо сектор. Перший елемент PT у вторинної MBR характеризує логічний диск у розширеному розділі. Якщо параметр код системи першого елемента PT вторинної MBR відповідає параметру файлової системи FAT то даному логічному диску привласнюємо чергову букву.
Якщо другий елемент PT дорівнює нулю отже інформація в даному розділі жорсткого диска вичерпана, інакше перевіряємо код системи на 05h або 0Fh, і обчислюємо адресу наступної вторинної MBR, як
ADR_BEG_EXP + OTN_ADR
де ADR_BEG_EXP - адрес початку розширеного розділу
OTN_ADR - відносний номер першого сектору розділу
По цій адресі зчитуємо чергову вторинну MBR і повторюємо дії виконувані з першої вторинної MBR. На граф схемі алгоритму ці операції виконуються у блоках 6-9. Програмний код реалізуючий даний алгоритм наведений нижче
for(int i=0;i<4;i++)//Цикл по чотирьом елементам Partition Table
//Перевірка на розширений розділ
...
beg_ext=MBR.table[i].smeshenie; //Початок розширеного розділу
next_MBR=0;
int j=i;
do //Цикл по ланцюгам розширеного розділу
{
next_MBR=next_MBR+MBR.table[j].smeshenie;
get_MBR(&MBR,drive,next_MBR); //Читання MBR. MBR-
//структура MBR,
//drive – номер жорсткого диска
// next_MBR–номер першого сектору MBR
if(FAT(MBR.table[0].sys))//Перевірка на файлову системуFAT
{
//Іменуємо диск та виводимо потрібну інформацію
...
}
j=1;
next_MBR=beg_ext;
}
while(MBR.table[1].sys!=0);
//Перехід до наступного жорсткого диску
}
Приклад структури ланцюжка логічних дисків у розширеному розділі представлений на рис 1.4

Рис1.4 Ланцюжок логічних дисків у розширеному розділі
2.4 Іменування логічних дисків, що залишилися, в основних розділах.
Остання частина алгоритму - іменування логічних дисків, що залишилися, в основних розділах. Граф схема цього участку алгоритму приведена на рис 1.4.Для цього на кожному жорсткому диску переглядаємо елементи PT на предмет пошуку логічних дисків FAT, які не були охоплені першим пунктом алгоритму (рис 1.1). Кожному знайденому диску привласнюємо чергову букву.

рис 1.4 Граф схема алгоритм пошуку та іменування логічних дисків залишившихся основних розділах.
Фрагмент коду програми
for(int i=0;i<4;i++) //Цикл по чотирьом елементам Partition Table
//Перевірка на FAT а також, що даний логічний диск ще не проіменован
if(FAT(MBR.table[i].sys)&&(DRIVE[drive-0x80].num_table!=i))
{
//Іменуємо диск та виводимо потрібну інформацію
...
}
