Como usar as extensões 13H INTERNAS em C que programa, nós podemos chamar as funções de extensão de 13H INTERNO com as mesmas funções de C (int86 (), int86x () etc.), que nós usávamos nos capítulos mais adiantados. O seguinte exemplo dá o foco às três funções (as extensões da verificação atuais, lida prolongada e estendido escrevem)

Data Recovery Software
Software Development Home Contact us Support

Data Recovery | Data Recovery Software | Partition Recovery | Undelete Partition | Password Recovery | Keylogger | File Recovery | Undelete Software

Como usar as extensões 13H INTERNAS na programação de C

Nós podemos chamar as funções de extensão de 13H INTERNO com as mesmas funções de C (int86 (), int86x () etc.), que nós usávamos nos capítulos mais adiantados. Deixar-nos aprendê-lo por um exemplo.

O seguinte exemplo dá o foco às três funções (as extensões da verificação atuais, lida prolongada e estendido escrevem). Entretanto nós não estamos indo ao uso estendido escrevemos a função neste capítulo.

Data Recovery
Digital Camera Data Recovery iPod Data Recovery Data Retrieval Software USB Drive Data Recovery
Data Recovery Utility Undelete Files Data Recovery Utilities Pen Drive Data Recovery
Files Recovery Windows Data Recovery File Recovery Software Data Recovery Services

Do programa as verificações se as extensões forem suportadas ou não se as extensões estiverem atuais para 13H INTERNO, primeiramente lê o setor absoluto 0 (assim MBR) do disco. O coding do programa prosegue na seguinte maneira:

/* Programa para alcançar setores além de 8.46 GB usando 13 extensões INTERNAS do 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;

/* a estrutura do disk_packet é carregada no DS: O SI e o comando executaram */

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

/* Para suportar o disco mesmo da capacidade de 1152921504.607 GB */

DWord lba1;
DWord lba2;
}disk_pack;

/* Funcionar para verificar se as extensões forem suportadas */

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

/* Escrever-se-á na mesma maneira que os read_sectors funcionam, a não ser que o número da função, que será 0x43 nesta função. Nós discutiremos prolongado escrevemos a função em capítulos seguintes.

Antes de usar esta função por favor verificar e verificar o que são você que vai fazer. Você deve ter o conhecimento apropriado de o que você está indo fazer. O uso desta função na falta do conhecimento ou descuidada pode destruir seus dados. */

}

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

 

Comentários no Coding do programa

o typedef atribui ao identificador ao tipo de dados tais que Byte não assinado do char do typedef; atribui o Byte do identificador para o tipo de dados char. A palavra do identificador é atribuída similarmente a interno e DWord é atribuído para long.

A estrutura do disk_packet é carregada no DS: O SI e o comando (tal como lida prolongada, estendido escrever ou verificar etc.) são executados. Ver as funções das extensões 13H INTERNAS de IBM/MS (função 41H a funcionar 49H) dadas antes.

The check_ext_present() verificações de função se as extensões forem disponíveis/suportadas ou não. A função é chamada com BX=55AAH (inregs.x.bx=0x55AA;) e se as extensões forem suportadas o registo de BX é ajustado a AA55H. (Ver a função 41H dada antes)

Os read_sectors da função são usados ler o setor absoluto do disco, especificado por disk_pack.lba1. Neste programa nós demos disk_pack.lba1=0, assim nós estamos indo ler o setor absoluto 0 (ver a nota abaixo) que vai assim ler o MBR do disco.

A função do write_sector é também mesma como os read_sectors funcionam e serão escritos na mesma maneira mas com as opções diferentes da função. Nós usá-la-emos nos capítulos seguintes.

Note:

Nós lemos os setores do disco nas seguintes duas maneiras:

  1. Setor relativo lido (ou escrever)
  2. O setor absoluto leu (ou escrever)

No setor relativo lido nós lemos os setores do disco de acordo com a geometria de CHS (cilindro, principal e setor) do disco. No setor relativo lido o MBR do disco (primeiro setor do disco) está no cilindro 0, na cabeça 0 e no setor 1.

Na leitura absoluta dos setores do disco, nós não necessitamos especificar o cilindro ou os números principais em nosso programa. Os setores absolutos são contados do setor absoluto 0.

Assim se nós estivermos indo ler o MBR do disco (primeiro setor do disco), nós estamos indo ler o setor absoluto 0. É o trabalho do BIOS para converter o número absoluto do setor a seu número correspondente do cilindro, o principal e do setor.

Como na leitura absoluta do setor (ou na escrita), nós temos que calcular somente os setores absolutos dentro do laço nas operações tais como a leitura inteira do disco ou a escrita, visto que em caso da leitura relativa do setor (ou da escrita), nós necessitamos funcionar três laços de cada vez para calcular a leitura/escrita absolutas do setor de CHS conseqüentemente é muito mais rápida do que a leitura/escrita relativas do setor.

Por exemplo, se nós tivermos qualquer disco duro com as 16 cabeças (lados), 12 cilindros e com 63 setores, a tabela dada em seguida, mostras o procedimento e diferença de ambos os métodos e assim mostras da leitura como a aproximação absoluta do setor pode fazer nosso tempo que faz exame de programas (tais como a escrita inteira da leitura do disco ou o disco inteiro que limpam os programas etc.) ao funcionamento muito mais rapidamente:

Leitura relativa dos setores

Leitura absoluta do setor

Cylinder =0, Head =0, Sector = 1

        Absolute Sector = 0

Cylinder =0, Head =0, Sector = 2

        Absolute Sector = 1

Cylinder =0, Head =0, Sector = 3

        Absolute Sector = 2

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =0, Head =0, Sector = 62

        Absolute Sector = 61

Cylinder =0, Head =0, Sector = 63

        Absolute Sector = 62

Cylinder =0, Head =1, Sector = 1

        Absolute Sector = 63

Cylinder =0, Head =1, Sector = 2

        Absolute Sector = 64

Cylinder =0, Head =1, Sector = 3

        Absolute Sector = 65

Cylinder =0, Head =1, Sector = 4

        Absolute Sector = 66

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =0, Head =1, Sector = 63

        Absolute Sector = 125

Cylinder =0, Head =2, Sector = 1

        Absolute Sector = 126

Cylinder =0, Head =2, Sector = 2

        Absolute Sector = 127

Cylinder =0, Head =2, Sector = 3

        Absolute Sector = 128

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =0, Head =15, Sector = 63

        Absolute Sector = 1007

Cylinder =1, Head =0, Sector = 1

        Absolute Sector = 1008

Cylinder =1, Head =0, Sector = 2

        Absolute Sector = 1009

Cylinder =1, Head =0, Sector = 3

        Absolute Sector = 1010

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =1, Head =0, Sector = 63

        Absolute Sector = 1070

Cylinder =1, Head =1, Sector = 1

        Absolute Sector = 1071

Cylinder =1, Head =1, Sector = 2

        Absolute Sector = 1072

Cylinder =1, Head =1, Sector = 3

        Absolute Sector = 1073

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =1, Head =15, Sector = 63

        Absolute Sector = 2015

Cylinder =2, Head =0, Sector = 1

        Absolute Sector = 2016

Cylinder =2, Head =0, Sector = 2

        Absolute Sector = 2017

Cylinder =2, Head =0, Sector = 3

        Absolute Sector = 2018

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =11, Head =15, Sector = 60

        Absolute Sector = 12092

Cylinder =11, Head =15, Sector = 61

        Absolute Sector = 12093

Cylinder =11, Head =15, Sector = 62

        Absolute Sector = 12094

Cylinder =11, Head =15, Sector = 63

        Absolute Sector = 12095

 

A informação da tabela da divisória de MBR, que é indicado por todo o disco MBR que analisa a ferramenta, foi dada abaixo:

Na informação acima, os números relativos do setor para começar de ambas as divisórias são 63 e 11277630 respectivamente, que estão livres das divisórias e são contadas de acordo com o número dos setores, disponível no disco.

Sample Chapters from book DATA RECOVERY WITH AND WITHOUT PROGRAMMING by Author Tarun Tyagi
Data Recovery with & without Programming


Publishers of the Book
Number of Pages
ISBN
Price of the Book


BPB Publications, New Delhi, India
540
81-7656-922-4
$69.00 (Including Shipping Charges, Cost of Book and Other expenses, Free Source Code CD included with the Book)





Buy Data recovery Book

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 | 19 | 20


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

Next page

Data recovery software Data recovery software
Windows Data Recovery Software Windows Data Recovery Software
iPod Data Recovery Software iPod Data Recovery Software
Memory Card Data Recovery Software Memory Card Data Recovery Software
Pen Drive Data Recovery Software Pen Drive Data Recovery Software
Digital Camera Data Recovery Software Digital Camera Data Recovery Software
Removable Media Data Recovery Software Removable Media Data Recovery Software
FAT Data Recovery Software

FAT Data Recovery Software

NTFS Data Recovery Software NTFS Data Recovery Software
Zune Music Recovery Software Zune Music Recovery Software
Sim Card Data Recovery Software Sim Card Data Recovery Software
Digital Pictures Recovery Software Digital Pictures Recovery Software

System Utilities System Utilities
Keylogger Keylogger
Secure Data Wiper Secure Data Wiper

Real Estate Ghaziabad

Real Estate Ghaziabad

Real Estate Noida

Real Estate Noida

Website Design

Website Design

Web Services

Web Services

Link Exchange

Link Exchange

Live Chat Online

Live Chat Online

Mobile Website Design

Mobile Website Design

Software Development

Software Development

File Recovery Tools

File Recovery Tools

Data Retrieval

Data Retrieval

Memory Stick Data Recovery

Memory Stick Data Recovery

Files Recovery

Files Recovery

Hard Drive Data Recovery

Hard Drive Data Recovery

iPod Restore

iPod Restore

Mobile Phone Data Recovery

Mobile Phone Data Recovery

Data Recovery Tools

Data Recovery Tools

© Copyright 2002-2005 DataDoctor.Biz

Home | Contact us | Downloads | Services | Resources | Terms and conditions | Site map

Languages: English Spanish French German italian portuguese Japanese Korean Chinese Russian Dutch Greek
Data Recovery Book: English Spanish French German Italian Portuguese Japanese Korean Chinese Russian Dutch Greek