Как использовать INT 13H Расширения Программирование C, мы можем назвать Расширение функций INT 13H с той же функции C (() int86, int86x () и т.д.), которой мы пользовались в предыдущих главах. Следующий пример позволяет сосредоточить внимание на три функции (Проверить Extensions настоящее время, продлен продлен читать и писать)

Files Recovery Software
Дом Контактная информация Служба поддержки Скачать демо - Продукция  

 
 

Как использовать INT 13H Расширения C Programming

Мы можем назвать Расширение функций INT 13H с той же функции C (() int86, int86x () и т.д.), которой мы пользовались в предыдущих главах. Давайте учиться ему пример.

Следующий пример позволяет сосредоточить внимание на три функции (Проверить Extensions настоящее время, продлен продлен читать и писать). Однако мы не собираемся писать используете функцию в этой главе.

Программа сначала проверяет в случае продления или не продления в том случае, если находятся за INT 13H, Она считывает сектор 0 абсолютной (т.е. MBR) на диске. Кодирования программы проводится следующим образом :

/* Программа для доступа к секторам за 8.46 GB использовании INT 13 BIOS расширений */

#include<stdio.h>
#include<dos.h>

/* Assigns the identifier to the data type */
typedef unsigned char Byte;
typedef unsigned int Word;
typedef unsigned long DWord;

/* disk_packet structure is loaded in DS:SI and command executed */

struct disk_packet
{
Byte size_pack; // Size of packet must be 16 or 16+
Byte reserved1; // Reserved
Byte no_of_blocks;// Number of blocks for transfer
Byte reserved2; // Reserved

/* Address in Segment:Offset format */
Word offset; //offset address
Word segment; //segment address

/* To Support the Disk Even of Capacity of 1152921504.607 GB */

DWord lba1;
DWord lba2;
}disk_pack;

/* Function to check if the Extensions are supported */

void check_ext_present()
{
union REGS inregs, outregs; /* Input Registers and
Output */
inregs.h.ah=0x41; /* Function to Check
Extension Present */
inregs.x.bx=0x55AA;
inregs.h.dl=0x80; /* Drive No for first Hard Disk */

int86(0x13,&inregs,&outregs); /*Call interrupt */

if(outregs.x.cflag)
{
/* Extension Not Supported */
printf("\nBios extension not supported");
exit(1);
}

if(outregs.x.bx==0xAA55)
if(outregs.x.cx & 0x1)

/* Extension Present */
printf("\nExtended I/O supported");
}

/* Function to read the Sector */

void read_sectors(void *buffer)
{
union REGS inregs, outregs; /* Input and Output
Registers */
struct SREGS segregs; // Segment Registers
disk_pack.size_pack=16; // Set size to 16
disk_pack.no_of_blocks=1; // One block
disk_pack.reserved1=0; // Reserved Word
disk_pack.reserved2=0; // Reserved Word
disk_pack.segment=FP_SEG(buffer);// Segment of buffer
disk_pack.offset=FP_OFF(buffer); // Offset of buffer

/* request for MBR of hard disk 1 */
/* Read Absolute sector 0 */

disk_pack.lba1=0; /* LBA address, Contains first
32 bits */

/* We normally require( drives < 2.1 T.B) to set
only this */

disk_pack.lba2=0; // Last 32 bit address
inregs.h.ah=0x42; // Function to read
inregs.h.dl=0x80; // Drive Number for First Hard Disk inregs.x.si = FP_OFF(&disk_pack); /*Make DS:SI point
to disk_pack */
segregs.ds = FP_SEG(&disk_pack);

/* Call Interrupt */
int86x(0x13,&inregs,&outregs,&segregs);

if(outregs.x.cflag)
printf("\n\nError %d\n",outregs.h.ah);
else
printf("\n\nI hope Everything is all Right");
}

//// Write Sector Function \\\\

void write_sector()
{

/* Оно пишется так же, как read_sectors функции, за исключением функций Номер которые будут 0x43 этой функции. Мы поговорим продлен написать функцию в следующей главе.

До использования этой функции проверьте и убедитесь, что вы собираетесь делать. Вы должны иметь необходимые знания о том, что вы собираетесь делать. Используйте эту функцию в отсутствие знаний или, возможно, неосторожно разрушить ваши данные.*/

}

/// Main Function \\\\
void main()
{
int i=0;

/* buffer to hold MBR */
Byte mbr[512];
clrscr();

/* check for BIOS extension present */
check_ext_present();

/* read sector */
read_sectors(&mbr);

printf("\n\n Data of MBR \n");
printf("▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n\n\n");
while(i++<512)
{
/* display the MBR buffer */
printf("%c",mbr[i]);
}
}

 

Комментарии к Кодирование программы

typedef задает идентификатор, тип данных, что такое typedef неподписанные байта символ; присваивает идентификатор байта для типа данных характеристик. Аналогично Word идентификатор присваивается int DWord и возлагается на долго.

Disk_packet структура загружается в DS : SI и командованием (таких как продление образом, продлен писать или проверять и т.д.), казнен. См. функции IBM / MS Extensions INT 13H (функция к функции 41H 49H) раньше.

Check_ext_present () функции проверяет модули доступны / поддерживает или нет. Функция вызвана с ВХ = 55AAH (inregs.x.bx = 0x55AA;) А если расширение поддерживает регистр ВХ имеет значение AA55H. (См. Функция 41H раньше)

Функция read_sectors используется следующим образом абсолютные сектора диска, указываемый disk_pack.lba1. В этой программе мы уделяем disk_pack.lba1 = 0, Таким образом, мы будем читать абсолютного 0 сектора (см. Примечание ниже), таким образом, происходит следующим образом MBR на диске.

Write_sector функция также же, как и функция read_sectors будут написаны таким же образом, но с Функция различных вариантов. Мы будем использовать его в последующих главах.

Примечание :

Мы читаем секторов диска в следующих двух способов :

  1. Относительный сектор Прочтите (или напишите)
  2. Абсолютные сектора Прочтите (или напишите)

В секторе Относительная Читать мы читаем секторов диска в соответствии с КНП (Цилиндрические, Начальник сектора и) геометрию диска. В относительном секторе прочитать MBR на диске (первый сектор на диске) находится на Цилиндрические 0, руководитель сектора 0 и 1.

В Абсолют чтение секторов диска, Нам нет надобности указывать или цилиндров руководитель номера в нашей программе. Абсолютные сектора отсчитываются от абсолютного 0 сектора.

Таким образом, если мы будем читать в MBR диска (первый сектор на диске), мы будем читать абсолютный сектор 0. Именно работа BIOS преобразовать абсолютные сектора рядом с корреспондентом цилиндров, головки и номер сектора.

Как и в абсолютном секторе чтения (или записи), нам надо только подсчитать абсолютные сектора в шлейфе в таких операциях, как всего диска, считывание или письменной форме, а в случае относительного сектора чтения (или записи), нам нужно запустить три петли на момент расчета КНП поэтому абсолютные сектора чтения / записи не намного быстрее, чем относительные сектора чтения / writing.

Например, если нам нужно любой жесткий диск, 16 головок (сторон), 12 цилиндров и 63 секторов, учетом следующей таблице, показывает, процедуры и разница как методы чтения и, таким образом, показывает, как абсолютный подход может сделать наши момент принятия программы (например, чтения всего диска / письменно или стирая весь диск и т. п.) запускался значительно быстрее :

Relative Sectors ReadingОтносительная чтение секторов

Absolute Sector readingАбсолютные сектора чтении

Cylinder =0, Head =0, Sector = 1Цилиндрические = 0, = 0 Начальник сектора = 1

        Absolute Sector = 0Абсолютные сектора = 0

Cylinder =0, Head =0, Sector = 2Цилиндрические = 0, = 0 Начальник сектора = 2

        Absolute Sector = 1Абсолютные сектора = 1

Cylinder =0, Head =0, Sector = 3Цилиндрические = 0, = 0 Начальник сектора = 3

        Absolute Sector = 2Абсолютные сектора = 2

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =0, Head =0, Sector = 62Цилиндрические = 0, = 0 Начальник сектора = 62

        Absolute Sector = 61Абсолютные сектора = 61

Cylinder =0, Head =0, Sector = 63Цилиндрические = 0, = 0 Начальник сектора = 63

        Absolute Sector = 62Абсолютные сектора = 62

Cylinder =0, Head =1, Sector = 1Цилиндрические = 0, = 1 Начальник, Сектор = 1

        Absolute Sector = 63Абсолютные сектора = 63

Cylinder =0, Head =1, Sector = 2Цилиндрические = 0, = 1 Начальник сектора = 2

        Absolute Sector = 64Абсолютные сектора = 64

Cylinder =0, Head =1, Sector = 3Цилиндрические = 0, = 1 Начальник сектора = 3

        Absolute Sector = 65Абсолютные сектора = 65

Cylinder =0, Head =1, Sector = 4Цилиндрические = 0, = 1 Начальник сектора = 4

        Absolute Sector = 66Абсолютные сектора = 66

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =0, Head =1, Sector = 63Цилиндрические = 0, = 1 Начальник сектора = 63

        Absolute Sector = 125Абсолютный сектор = 125

Cylinder =0, Head =2, Sector = 1Цилиндрические = 0, = 2 Начальник сектора = 1

        Absolute Sector = 126Абсолютный сектор = 126

Cylinder =0, Head =2, Sector = 2Цилиндрические = 0, = 2 Начальник сектора = 2

        Absolute Sector = 127Абсолютный сектор = 127

Cylinder =0, Head =2, Sector = 3Цилиндрические = 0, = 2 Начальник сектора = 3

        Absolute Sector = 128Абсолютный сектор = 128

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =0, Head =15, Sector = 63Цилиндрические = 0, = 15 Начальник сектора = 63

        Absolute Sector = 1007Абсолютные сектора = 1007

Cylinder =1, Head =0, Sector = 1Цилиндрические = 1, Глава = 0, Сектор = 1

        Absolute Sector = 1008Абсолютные сектора = 1008

Cylinder =1, Head =0, Sector = 2Цилиндрические = 1, Глава = 0, Сектор = 2

        Absolute Sector = 1009Абсолютные сектора = 1009

Cylinder =1, Head =0, Sector = 3Цилиндрические = 1, Глава = 0, Сектор = 3

        Absolute Sector = 1010Абсолютные сектора = 1010

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =1, Head =0, Sector = 63Цилиндрические = 1, Глава = 0, Сектор = 63

        Absolute Sector = 1070Абсолютные сектора = 1070

Cylinder =1, Head =1, Sector = 1Цилиндрические = 1, = 1 Начальник, Сектор = 1

        Absolute Sector = 1071Абсолютные сектора = 1071

Cylinder =1, Head =1, Sector = 2Цилиндрические = 1, Глава 1 =, = 2 сектора

        Absolute Sector = 1072Абсолютные сектора = 1072

Cylinder =1, Head =1, Sector = 3Цилиндрические = 1, = 1 Начальник сектора = 3

        Absolute Sector = 1073Абсолютные сектора = 1073

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =1, Head =15, Sector = 63Цилиндрические = 1, Глава = 15, = 63 сектор "

        Absolute Sector = 2015Абсолютные сектора = 2015 году

Cylinder =2, Head =0, Sector = 1Цилиндрические = 2, Глава = 0, Сектор = 1

        Absolute Sector = 2016Абсолютные сектора = 2016

Cylinder =2, Head =0, Sector = 2Цилиндрические = 2, Глава = 0, Сектор = 2

        Absolute Sector = 2017Абсолютные сектора = 2017

Cylinder =2, Head =0, Sector = 3Цилиндрические = 2, Глава = 0, Сектор = 3

        Absolute Sector = 2018Абсолютные сектора = 2018

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =11, Head =15, Sector = 60Цилиндрические = 11, 15 = Начальник, Сектор = 60

        Absolute Sector = 12092Абсолютные сектора = 12092

Cylinder =11, Head =15, Sector = 61Цилиндрические = 11, 15 = Начальник, Сектор = 61

        Absolute Sector = 12093Абсолютные сектора = 12093

Cylinder =11, Head =15, Sector = 62Цилиндрические = 11, 15 = Начальник, Сектор = 62

        Absolute Sector = 12094Абсолютные сектора = 12094

Cylinder =11, Head =15, Sector = 63Цилиндрические = 11, 15 = Начальник, Сектор = 63

        Absolute Sector = 12095Абсолютные сектора = 12095

 

Информацию о таблице разделов в MBR, который отображается на диск MBR любой инструмент анализа, были приведены ниже :

В вышеуказанной информации относительного номера сектора начала обоих разделов 63 и 11277630 соответственно, которые были свободны от разделов и, исходя из количества секторов на диске.


Previous page

page 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18

19 | 20

 

 

Chapter 10


page 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18


page 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33

Next page

 
 
Для восстановления данных книги
 
Глава 1 Обзор восстановления данных
Глава 2 Введение жестких дисков
Глава 3 Логический подход к дисков и ОС
Глава 4 Количество систем
Глава 5 Введение в программирование
Глава 6 Введение в информатику
Глава 7 Необходимые команды DOS
Глава 8 Диск - функции BIOS и прерывания контакта с C
Глава 9 Обработка больших жестких дисков
Глава 10 Восстановление данных с поврежденных дискет
Глава 11 Создание резервных копий
Глава 12 Чтение и изменение MBR с Programming
Глава 13 Чтение и Изменение DBR со Программирование
Глава 14 Программирование на "Сырье Файл" подъема
Глава 15 Программирование на данные Стеклоочистители
Глава 16 Разработка более Утилиты для дисков
Добавление Глоссарий терминов по восстановлению данных
 
 
Pro Data Doctor

Дом

Продукция

Контактная информация

Служба поддержки

Скачать демо -

Положения и условия

 
Pro Data Doctor