Hoe te om de Uitbreidingen te gebruiken van int. 13H in de Programmering van C kunnen wij de Functies van de Uitbreiding van int. 13H met de zelfde functies van C (int86(), int86x () enz. roepen.) , wat wij in de vroegere hoofdstukken gebruikten. Het volgende voorbeeld geeft de nadruk aan de drie functies (aanwezige, uitgebreid gelezen en de uitgebreide Uitbreidingen van de Controle schrijven)

Files Recovery Software
Home Contactgegevens Customer Support Download Demo Producten  

 
 

Hoe te om de Uitbreidingen te gebruiken van int. 13H in de Programmering van C

Wij kunnen de Functies van de Uitbreiding van int. 13H met de zelfde functies van C (int86(), int86x () enz. roepen.) , wat wij in de vroegere hoofdstukken gebruikten. Leer het door een voorbeeld.

Het volgende voorbeeld geeft de nadruk aan de drie functies (aanwezige, uitgebreid gelezen en de uitgebreide Uitbreidingen van de Controle schrijven). Nochtans gaan wij niet gebruiken uitgebreid schrijven functie in dit hoofdstuk.

De programma eerste controles als de uitbreidingen of niet als de uitbreidingen aanwezig zijn voor int. 13H worden gesteund, het leest absolute sector 0 (zo MBR) van de schijf. De codage van het programma gaat op de volgende manier te werk:

/* Programma om tot sectoren voorbij 8,46 GB toegang te hebben gebruikend BIOS van int. 13 uitbreidingen */

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

/* Wijst het herkenningsteken aan het gegevenstype toe */
typedef unsigned char Byte;
typedef unsigned int Word;
typedef unsigned long DWord;

/* disk_packet wordt de structuur geladen in uitgevoerde DS:SI en bevel */

struct disk_packet
{
Byte size_pack; // De grootte van pakket moet 16 of 16 zijn +
Byte reserved1; // Gereserveerd
Byte no_of_blocks;// Aantal blokken voor overdracht
Byte reserved2; // Gereserveerd

/* Adres in formaat Segment:Offset */
Word offset; //offset address
Word segment; //segment address

/* Om de Schijf zelfs van Capaciteit van te steunen 1152921504.607 GB */

DWord lba1;
DWord lba2;
}disk_pack;

/* Te controleren functie als de Uitbreidingen worden gesteund */

void check_ext_present()
{
union REGS inregs, outregs; /* De Registers van de input en
Output */
inregs.h.ah=0x41; /* Te controleren functie
Aanwezige uitbreiding */
inregs.x.bx=0x55AA;
inregs.h.dl=0x80; /* Drijf Nr voor eerste Harde Schijf */

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

if(outregs.x.cflag)
{
/* Gesteunde niet uitbreiding */
printf("\nBios extension not supported");
exit(1);
}

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

/* Aanwezige uitbreiding */
printf("\nExtended I/O supported");
}

/* Functie om de Sector te lezen */

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

/* verzoek om MBR van harde schijf 1 */
/* Lees Absolute sector 0 */

disk_pack.lba1=0; /* Het adres LBA, bevat eerst
32 bits */

/* Wij require(drijven < normaal 2,1 T.B) om te plaatsen
slechts dit */

disk_pack.lba2=0; // Duur 32 beetjeadres
inregs.h.ah=0x42; // Te lezen functie
inregs.h.dl=0x80; // Het Aantal van de aandrijving voor Eerste Harde Schijf inregs.x.si = FP_OFF (&disk_pack); / * Maak punt DS:SI
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");
}

//// Schrijf de Functie van de Sector \\\\

void write_sector()
{

/* Het zal worden geschreven op dezelfde manier als functioneren read_sectors, behalve het Aantal van de Functie, dat 0x43 in deze functie zal zijn. Wij zullen uitgebreid schrijven functie in volgende hoofdstukken bespreken.

Alvorens deze Functie Te gebruiken gelieve te verifiëren controleer en wat u die zijn gaan doen. U zou de juiste kennis moeten hebben van wat u gaat doen. Het gebruik van deze functie in gebrek aan kennis of kan zorgeloos uw gegevens vernietigen. */

}

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

/* buffer om MBR te houden */
Byte mbr[512];
clrscr();

/* controle voor BIOS aanwezige uitbreiding */
check_ext_present();

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

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

 

Commentaren op Codage van het programma

typedef Wijst het herkenningsteken aan het gegevenstype dusdanig dat toe typedef niet ondertekende klusjesbyte; wijst herkenningstekenbyte voor het gegevenstype klusje toe. Zo ook wordt herkenningstekenWord toegewezen aan int. en DWord wordt lang toegewezen aan.

De disk_packetstructuur wordt geladen in DS:SI en het bevel (zoals uitgebreid gelezen, uitgebreid schrijf of verifiëer enz.) wordt uitgevoerd. Zie de functies van voordien de gegeven Uitbreidingen van IBM/van lidstaten int. 13H (Functie 41H om te functioneren 49H).

De check_ext_present () functiecontroles als de uitbreidingen of niet beschikbaar/gesteund zijn. De functie wordt geroepen met BX=55AAH (inregs.x.bx=0x55AA;) en als de uitbreidingen worden gesteund wordt het register BX geplaatst aan AA55H. (Zie voordien gegeven Functie 41H)

Read_sectors van de Functie wordt gebruikt om de absolute sector van de schijf te lezen, gespecificeerd=wordt= die door disk_pack.lba1. In dit programma hebben wij disk_pack.lba1=0 gegeven, dus wij gaan absolute sector 0 (zie hieronder de Nota) lezen zo gaand MBR van de schijf lezen.

De write_sectorfunctie is ook zelfde die read_sectors zullen functioneren en wordt geschreven op de zelfde manier maar met de verschillende opties van de Functie. Wij zullen het in de volgende hoofdstukken gebruiken.

Note:

Wij lezen de schijfsectoren op de volgende twee manieren:

  1. Relatieve Gelezen Sector (of schrijf)
  2. Absolute Gelezen Sector (of schrijf)

In Relatieve Gelezen Sector lezen wij de schijfsectoren overeenkomstig (Cilinder, Hoofd en Sector) meetkunde CHS van de schijf. In relatieve gelezen sector is MBR van de schijf (Eerste Sector van de schijf) op Cilinder 0, hoofd 0 en Sector 1.

In de Absolute lezing van de schijfsectoren, te hoeven wij niet om de Cilinder of de Hoofdaantallen in ons programma te specificeren. De absolute sectoren worden geteld van absolute sector 0.

Aldus als wij MBR van de schijf (Eerste sector van de schijf) gaan lezen, gaan wij absolute sector 0 lezen. Het is het werk van BIOS om het absolute sectoraantal aan zijn overeenkomstig Cilinder, Hoofd en aantal van de Sector om te zetten.

Zoals in absolute sectorlezing (of het schrijven), moeten wij slechts de absolute sectoren binnen de lijn in de verrichtingen zoals volledige schijflezing berekenen of schrijvend, terwijl in het geval van relatieve sectorlezing (of het schrijven), wij drie lijnen in een tijd moeten in werking stellen voor het berekenen CHS daarom zijn de absolute sectorlezing/schrijven veel sneller dan relatieve sectorlezing/het schrijven.

Bijvoorbeeld, als wij om het even welke harde schijf met de 16 hoofden (kanten) hebben, toont 12 Cilinders en met 63 sectoren, de daarna gegeven lijst, de procedure en het verschil van zowel de lezingsmethodes als toont zo hoe de absolute sectorbenadering kan onze tijd maken die programma's neemt (zoals het volledige schijflezing/schrijven of volledige schijf het afvegen programma's enz.) om veel sneller te lopen:

Het relatieve Lezen van Sectoren

De absolute lezing van de Sector

Cilinder = 0, Hoofd = 0, Sector = 1

Absolute Sector = 0

Cilinder = 0, Hoofd = 0, Sector = 2

Absolute Sector = 1

Cilinder = 0, Hoofd = 0, Sector = 3

Absolute Sector = 2

.
.
.
.

.
.
.
.

Cilinder = 0, Hoofd = 0, Sector = 62

Absolute Sector = 61

Cilinder = 0, Hoofd = 0, Sector = 63

Absolute Sector = 62

Cilinder = 0, Hoofd = 1, Sector = 1

Absolute Sector = 63

Cilinder = 0, Hoofd = 1, Sector = 2

Absolute Sector = 64

Cilinder = 0, Hoofd = 1, Sector = 3

Absolute Sector = 65

Cilinder = 0, Hoofd = 1, Sector = 4

Absolute Sector = 66

.
.
.
.

.
.
.
.

Cilinder = 0, Hoofd = 1, Sector = 63

Absolute Sector = 125

Cilinder = 0, Hoofd = 2, Sector = 1

Absolute Sector = 126

Cilinder = 0, Hoofd = 2, Sector = 2

Absolute Sector = 127

Cilinder = 0, Hoofd = 2, Sector = 3

Absolute Sector = 128

.
.
.
.

.
.
.
.

Cilinder = 0, Hoofd = 15, Sector = 63

Absolute Sector = 1007

Cilinder = 1, Hoofd = 0, Sector = 1

Absolute Sector = 1008

Cilinder = 1, Hoofd = 0, Sector = 2

Absolute Sector = 1009

Cilinder = 1, Hoofd = 0, Sector = 3

Absolute Sector = 1010

.
.
.
.

.
.
.
.

Cilinder = 1, Hoofd = 0, Sector = 63

Absolute Sector = 1070

Cilinder = 1, Hoofd = 1, Sector = 1

Absolute Sector = 1071

Cilinder = 1, Hoofd = 1, Sector = 2

Absolute Sector = 1072

Cilinder = 1, Hoofd = 1, Sector = 3

Absolute Sector = 1073

.
.
.
.

.
.
.
.

Cilinder = 1, Hoofd = 15, Sector = 63

Absolute Sector = 2015

Cilinder = 2, Hoofd = 0, Sector = 1

Absolute Sector = 2016

Cilinder = 2, Hoofd = 0, Sector = 2

Absolute Sector = 2017

Cilinder = 2, Hoofd = 0, Sector = 3

Absolute Sector = 2018

.
.
.
.

.
.
.
.

Cilinder = 11, Hoofd = 15, Sector = 60

Absolute Sector = 12092

Cilinder = 11, Hoofd = 15, Sector = 61

Absolute Sector = 12093

Cilinder = 11, Hoofd = 15, Sector = 62

Absolute Sector = 12094

Cilinder = 11, Hoofd = 15, Sector = 63

Absolute Sector = 12095

 

De informatie van verdelingslijst van MBR, die door om het even welke schijf MBR getoond wordt die hulpmiddel analyseert, is gegeven hieronder:

In de bovengenoemde informatie, zijn de relatieve sectoraantallen voor de aanvang van beide verdelingen 63 en respectievelijk 11277630, die vrij van verdelingen zijn en volgens het aantal sectoren geteld, beschikbaar in schijf.


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

 
 
Data Recovery boek
 
Hoofdstuk-1 Een Overzicht van de Terugwinning van Gegevens
Hoofdstuk-2 Inleiding van Harde Schijven
Hoofdstuk-3 Logische Benadering van Schijven en OS
Hoofdstuk-4 De Systemen van het aantal
Hoofdstuk-5 Inleiding van de Programmering van C
Hoofdstuk-6 Inleiding aan de Grondbeginselen van de Computer
Hoofdstuk-7 De noodzakelijke Bevelen van Dos
Hoofdstuk-8 Schijf-bios functioneert en onderbreekt Behandeling met C
Hoofdstuk-9 Behandelende Grote Harde Schijven
Hoofdstuk-10 De Terugwinning van gegevens van Bedorven Floppy
Hoofdstuk-11 Het maken van Steunen
Hoofdstuk-12 Het lezen van en het Wijzigen van MBR met Programmering
Hoofdstuk-13 Het lezen van en het Wijzigen van DBR met Programmering
Hoofdstuk-14 Programmering de Terugwinning voor van het "Ruwe Dossier"
Hoofdstuk-15 Programmering voor de Wissers van Gegevens
Hoofdstuk-16 Het ontwikkelen van meer Nut voor Schijven
Bijlage Verklarende woordenlijst van de Termijnen van de Terugwinning van Gegevens
 
 
Pro Data Doctor

Home

Producten

Contactgegevens

Customer Support

Download Demo

Algemene Voorwaarden

 
Pro Data Doctor