Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. IV. ГЛАВНАЯ СУДЕЙСКАЯ КОЛЛЕГИЯ
  2. IV. ГЛАВНАЯ СУДЕЙСКАЯ КОЛЛЕГИЯ И ОФИЦИАЛЬНЫЕ ЛИЦА
  3. В то же время, самая главная проблема в применении такого Волшебства заключалась в огромном перенапряжении тела.
  4. Вот главная причина того, почему дети растут -- эгоистичными, ленивыми и безответственными -- Инфантильными. Виноваты в этом -- только родители.
  5. Гипоидная главная передача
  6. ГЛАВА ТРИДЦАТЬ ШЕСТАЯ. О празднике, данном Мангу-ханом. О том, что главная его жена и старший сын были при богослужении несториан
  7. Главная битва

Задача 1.

Условие:

Найти физический номер дисковода.

 

Способ 1: программа читает загрузочную запись диска (BOOT-сектор) в специальную структуру и затем получает из нее значение поля,

 

Листинг программы:

 

#include <stdio.h>

#include <dos.h>

#include <conio.h>

#include <ctype.h>

 

typedef struct _EBPB_

{

unsigned sectsize;

char clustsize;

unsigned ressecs;

char fatcnt;

unsigned rootsize;

unsigned totsecs;

char media;

unsigned fatsize;

unsigned seccnt;

unsigned headcnt;

unsigned hiddensec_low;

unsigned hiddensec_hi;

unsigned long drvsecs;

} EBPB;

 

typedef struct _BOOT_

{

char jmp[3];

char oem[8];

EBPB bpb;

char drive;

char reserved;

char signature;

unsigned volser_lo;

unsigned volser_hi;

char label[11];

char fat_format[8];

char boot_code[450];

} BOOT;

 

int getboot(BOOT far *boot, int drive);

 

int main(void)

{

char boot[512];

BOOT far* boot_rec = (BOOT far*)boot;

int i, status;

char drive;

 

printf("\nЧтение загрузочной записи логического диска");

 

// Запрашиваем диск, для которого необходимо

// выполнить чтение загрузочной записи

printf(

"\nВведите обозначение диска, для просмотра"

"\nзагрузочной записи (A, B,...):");

drive = getche();

 

 

// Вычисляем номер дисковода

drive = toupper(drive) - 'A';

 

// Читаем загрузочную запись в буфер

status = getboot((BOOT far*)boot_rec, drive);

 

// Если произошла ошибка (например, неправильно

// указано обозначение диска),

// завершаем работу программы

if(status)

{

printf("\nОшибка при чтении загрузочного сектора");

return(-1);

}

 

printf("\nСодержимое загрузочного "

"сектора для диска %c", drive + 'A');

 

printf("\n"

"\nOEM - название фирмы и версия DOS - ");

 

for(i = 0; i < 8; i++)

printf("%c", boot_rec->oem[i]);

 

printf("\nНомер диска - %x",

(unsigned char)boot_rec->drive);

 

printf("\nФормат FAT - ");

for(i = 0; i < 8; i++)

printf("%c", boot_rec->fat_format[i]);

 

return 0;

}

 

/**

* getboot

*

* Прочитать загрузочную запись

*

* int getmboot(BOOT far *boot, int drive);

*

* boot - указатель на буфер, в который

* будет прочитана загрузочная запись

*

 

* drive - номер физического НМД

* (0 - первый НМД, 1 - второй,...)

**/

 

int getboot(BOOT far *boot, int drive)

{

union REGS reg;

struct SREGS segreg;

 

reg.x.ax = drive;

reg.x.bx = FP_OFF(boot);

segreg.ds = FP_SEG(boot);

reg.x.cx = 1;

reg.x.dx = 0;

int86x(0x25, &reg, &reg, &segreg);

 

// Извлекаем из стека оставшееся там после

// вызова прерывания слово

asm pop ax

return(reg.x.cflag);

}


Теоретическое обоснование.

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

Самый первый сектор жесткого диска (сектор 1, дорожка 0, головка 0) содержит так называемую главную загрузочную запись (Master Boot Record). Эта запись занимает не весь сектор, а только его начальную часть.

Сама по себе главная загрузочная запись является программой. Эта программа во время начальной загрузки операционной системы с НМД помещается по адресу 7C00h:0000h, после чего ей передается управление. Загрузочная запись продолжает процесс загрузки операционной системы.

Таблица разделов диска

В конце самого первого сектора жесткого диска располагается таблица разделов диска (Partition Table). Эта таблица содержит четыре элемента, описывающих до четырех разделов диска. В последних двух байтах сектора находится значение 55AAh. Это признак таблицы разделов (сигнатура таблицы разделов).

Для просмотра и изменения содержимого таблицы разделов НМД используется программа fdisk.exe.

Что представляет из себя элемент таблицы разделов диска?

Это структура размером 16 байт, соответствующая части диска, называемой разделом. В структуре располагается информация о расположении и размере раздела в секторах, а также о назначении раздела.

Разделы диска бывают активными или неактивными. Активный раздел может использоваться для загрузки операционной системы. Заметим, что диск может содержать одновременно несколько активных разделов, которые могут принадлежать разным операционным системам.

Приведем формат первого сектора жесткого диска:

Смещение, байт Размер, байт Описание
  1BEh Загрузочная запись
1BEh 10H Элемент таблицы разделов диска
1CEh 10H Элемент таблицы разделов диска
1DEh 10H Элемент таблицы разделов диска
1EEh 10H Элемент таблицы разделов диска
1FEh   Признак таблицы разделов - значение 55AAh

Все элементы таблицы разделов диска имеют одинаковый формат:


Дата добавления: 2015-10-16; просмотров: 67 | Нарушение авторских прав


Читайте в этой же книге: Формат загрузочной записи | Прерывания INT 25h и INT 26h | Найти физический номер дисковода. | Задача 2. | Создать резидентную программу, которая выводит на терминал слово "else" по нажатию Alt. | Инициализация резидентной программы |
<== предыдущая страница | следующая страница ==>
Тема 9. Глобальные проблемы человечества| Первичный и расширенный раздел

mybiblioteka.su - 2015-2024 год. (0.008 сек.)