Come usare le estensioni INTERNE 13H in C che si programma, possiamo denominare le funzioni di estensione di 13H INTERNO con le stesse funzioni di C (int86 (), int86x () ecc.), che stavamo usando nei capitoli più iniziali. Il seguente esempio dà il fuoco alle tre funzioni (le estensioni del controllo presenti, colta estesa ed estesa scrivono)

Files Recovery Software
Home Dettagli contatto Supporto Clienti Scarica la Demo Prodotti  

 
 

Come usare le estensioni INTERNE 13H nella programmazione di C

Possiamo denominare le funzioni di estensione di 13H INTERNO con le stesse funzioni di C (int86 (), int86x () ecc.), che stavamo usando nei capitoli più iniziali. Impariamolo da un esempio.

Il seguente esempio dà il fuoco alle tre funzioni (le estensioni del controllo presenti, colta estesa ed estesa scrivono). Tuttavia non stiamo andando ad uso esteso scriviamo la funzione in questo capitolo.

Di programma i controlli preliminari se le estensioni sono sostenute o non se le estensioni sono presenti per 13H INTERNO, legge il settore assoluto 0 (così MBR) del disc. La codificazione del programma continua nel seguente modo:

/* Programma per accedere ai settori oltre 8.46 GB usando le 13 estensioni INTERNE di ESSERE VIVENTE */

#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()
{

/* Sarà scritto come i read_sectors funzionano, a meno che numero di funzione, che sarà 0x43 in questa funzione. Discuteremo esteso scriviamo la funzione in capitoli seguenti.

Prima di usando questa funzione prego controllare e verificare che cosa sono voi che andate fare. Dovreste avere la conoscenza adeguata di che cosa state andando fare. L'uso di questa funzione nella mancanza di conoscenza o può distruggere trascuratamente i vostri dati. */

}

/// 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]);
}
}

 

Osservazioni su codificazione del programma

il typedef assegna al contrassegno al tipo di dati tali che byte unsigned del carbone del typedef; assegna il byte del contrassegno per il tipo di dati carbone. La parola del contrassegno è assegnata similmente ad interno e DWord è assegnato per desiderare.

La struttura del disk_packet è caricata in DS: Il SI e l'ordine (come colta estesa, esteso scrivere o verificare ecc.) è eseguito. Vedere le funzioni delle estensioni INTERNE 13H (funzione 41H di IBM/MS da funzionare 49H) date prima.

Le verifiche del funzionamento check_ext_present () se le estensioni sono disponibili/sostenute oppure no. La funzione è denominata con BX=55AAH (inregs.x.bx=0x55AA;) e se le estensioni sono sostenute il registro di BX è regolato a AA55H. (Vedere la funzione 41H data prima)

I read_sectors di funzione è usato per leggere il settore assoluto del disc, specificato da disk_pack.lba1. In questo programma abbiamo dato disk_pack.lba1=0, così stiamo andando leggere il settore assoluto 0 (vedere la nota qui sotto) che va così leggere il MBR del disc.

La funzione di write_sector è inoltre stessa come i read_sectors funzionino e siano scritti nello stesso senso ma con le opzioni differenti di funzione. La useremo nei capitoli seguenti.

Nota:

Abbiamo letto i settori del disc nei seguenti due sensi:

  1. Settore relativo colto (o scrivere)
  2. Il settore assoluto ha letto (o scrivere)

Nel settore relativo colto abbiamo letto i settori del disc in conformità con la geometria di CHS (cilindro, capo e settore) del disc. Nel settore relativo colto il MBR del disc (primo settore del disc) è sul cilindro 0, sulla testa 0 e sul settore 1.

Nella lettura assoluta dei settori del disc, non dobbiamo specificare il cilindro o i numeri capi nel nostro programma. I settori assoluti sono contati dal settore assoluto 0.

Così se stiamo andando leggere il MBR del disc (primo settore del disc), stiamo andando leggere il settore assoluto 0. È il lavoro dell'ESSERE VIVENTE per convertire il numero assoluto del settore in relativo numero capo e del settore corrispondente del cilindro.

Come nella lettura assoluta del settore (o nella scrittura), dobbiamo calcolare soltanto i settori assoluti all'interno del ciclo nei funzionamenti quale l'intera lettura del disc o la scrittura, mentre nel caso della lettura relativa del settore (o della scrittura), dobbiamo fare funzionare tre cicli alla volta per la calcolazione la lettura/scrittura assolute del settore di CHS quindi è molto più veloce della lettura/scrittura relative del settore.

Per esempio, se abbiamo qualunque disco rigido con le 16 teste (lati), 12 cilindri e con 63 settori, la tabella data dopo, le esposizioni la procedura e la differenza degli entrambi metodi e così esposizioni della lettura come il metodo assoluto del settore può fare il nostro tempo che prende i programmi (quali intera scrittura della lettura del disc o l'intero disc che pulisce i programmi ecc.) al funzionamento molto più velocemente:

Lettura relativa dei settori

Lettura assoluta del settore

Cilindro =0, =0 capo, settore = 1

        Settore assoluto = 0

Cilindro =0, =0 capo, settore = 2

        Settore assoluto = 1

Cilindro =0, =0 capo, settore = 3

        Settore assoluto = 2

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cilindro =0, =0 capo, settore = 62

        Settore assoluto = 61

Cilindro =0, =0 capo, settore = 63

        Settore assoluto = 62

Cilindro =0, =1 capo, settore = 1

        Settore assoluto = 63

Cilindro =0, =1 capo, settore = 2

        Settore assoluto = 64

Cilindro =0, =1 capo, settore = 3

        Settore assoluto = 65

Cilindro =0, =1 capo, settore = 4

        Settore assoluto = 66

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cilindro =0, =1 capo, settore = 63

        Settore assoluto = 125

Cilindro =0, =2 capo, settore = 1

        Settore assoluto = 126

Cilindro =0, =2 capo, settore = 2

        Settore assoluto = 127

Cilindro =0, =2 capo, settore = 3

        Settore assoluto = 128

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cilindro =0, =15 capo, settore = 63

        Settore assoluto = 1007

Cilindro =1, =0 capo, settore = 1

        Settore assoluto = 1008

Cilindro =1, =0 capo, settore = 2

        Settore assoluto = 1009

Cilindro =1, =0 capo, settore = 3

        Settore assoluto = 1010

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cilindro =1, =0 capo, settore = 63

        Settore assoluto = 1070

Cilindro =1, =1 capo, settore = 1

        Settore assoluto = 1071

Cilindro =1, =1 capo, settore = 2

        Settore assoluto = 1072

Cilindro =1, =1 capo, settore = 3

        Settore assoluto = 1073

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cilindro =1, =15 capo, settore = 63

        Settore assoluto = 2015

Cilindro =2, =0 capo, settore = 1

        Settore assoluto = 2016

Cilindro =2, =0 capo, settore = 2

        Settore assoluto = 2017

Cilindro =2, =0 capo, settore = 3

        Settore assoluto = 2018

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cilindro =11, =15 capo, settore = 60

        Settore assoluto = 12092

Cilindro =11, =15 capo, settore = 61

        Settore assoluto = 12093

Cilindro =11, =15 capo, settore = 62

        Settore assoluto = 12094

Cilindro =11, =15 capo, settore = 63

        Settore assoluto = 12095

 

Le informazioni della tabella del divisorio di MBR, che è visualizzato da tutto il disc MBR che analizza l'attrezzo, sono state fornite qui sotto:

Nelle suddette informazioni, i numeri relativi del settore per partire di entrambi i divisorii sono rispettivamente 63 e 11277630, che sono esenti dai divisorii e sono contati secondo il numero di settori, disponibile in disc.


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

 
 
Di recupero di dati libro
 
Capitolo 1 Una descrizione del recupero di dati
Capitolo 2 Introduzione dei dischi rigidi
Capitolo 3 Metodo logico ai disc ed all'OS
Capitolo 4 Sistemi di numero
Capitolo 5 Introduzione di programmazione di C
Capitolo 6 Introduzione ai principi fondamentali del calcolatore
Capitolo 7 Ordini necessari del DOS
Capitolo 8 Funzioni ed interruzioni di Disc-ESSERE VIVENTE che maneggiano con la C
Capitolo 9 Maneggiamento dei dischi rigidi grandi
Capitolo 10 Recupero di dati dal disco magnetico corrotto
Capitolo 11 Fare i sostegni
Capitolo 12 MBR leggente e di modificazione con la programmazione
Chapter 13 DBR leggente e di modificazione con la programmazione
Capitolo 14 Programmandosi per "il recupero della lima grezza"
Capitolo 15 Programmandosi per i pulitori di dati
Capitolo 16 Sviluppare più programmi di utilità per i disc
Appendice Glossario dei termini di recupero di dati
 
 
Pro Data Doctor

Home

Prodotti

Dettagli contatto

Supporto Clienti

Scarica la Demo

Termini e Condizioni

 
Pro Data Doctor