Escrevendo um programa para a recuperação crua da lima
O coding do programa para a recuperação crua da lima de limas do Microsoft Word (extensão de .DOC) tem sido dado em seguida. O programa procurara pelas limas nos setores do disco e conserva a lima recuperada automaticamente criando o nome da lima automaticamente.
O trajeto especificado pelo usuário para conservar as limas é usado como o trajeto do destino conservar os dados recuperados. Se o diretório do destino não existir, o programa pode criar o destino até um nível do diretório.
O programa da recuperação dado aqui suporta mesmo os discos grandes do tamanho para procurarar e recuperar os dados. O programa foi escrito para procurarar os dados no segundo disco duro físico.
/* O programa cru da recuperação da lima para recuperar o Microsoft Word arquiva */
#include<stdio.h>
#include<dos.h>
/* Estrutura a ser usada pela função getdrivegeometry
usando a extensão 13H INTERNA, número 0x48 da função. */
struct geometry
{
unsigned int size ; /* (call) size of Buffer */
unsigned int flags ; /* Information Flags */
unsigned long cyl ; /* Number of Physical
Cylinders on Drive */
unsigned long heads ;/* Number of Physical
Heads on Drive */
unsigned long spt ; /* Number of Physical
Sectors Per Track */
unsigned long sectors[2] ; /* Total Number of
Sectors on Drive */
unsigned int bps ; /* Bytes Per Sector */
} ;
/* A estrutura do formato do pacote do endereço de disco, para ser usado pelos readabsolutesectors funciona */
struct diskaddrpacket
{
char packetsize ; /* Size of Packet, generally 10H */
char reserved ; /* Reserved (0) */
int blockcount ; /* Number of Blocks to Transfer */
char far *bufferaddress ; /* address to Transfer
Buffer */
unsigned long blocknumber[2] ; /* Starting Absolute
Block Number */
} ;
///// Função para começar parâmetros da movimentação \\\\\
unsigned long getdrivegeometry (int drive)
{
union REGS i, o ;
struct SREGS s ;
struct geometry g = { 26, 0, 0, 0, 0, 0, 0, 0 } ;
i.h.ah = 0x48 ; /* Function Number 0x48 */
i.h.dl = drive; /* Drive Number */
i.x.si = FP_OFF ( (void far*)&g ) ;
s.ds = FP_SEG ( (void far*)&g ) ;
/* Invoke o número especificado da função de 13H INTERNO
extensão com valores do registo do segmento */
int86x ( 0x13, &i, &o, &s ) ;
printf("\n Head = %lu, Sectors Per Track = %lu, Cylinder = %lu\n",
g.heads,g.spt,g.cyl);
/* Se começar a função da geometria da movimentação falha, indica a mensagem de erro e retira-a */
if(g.spt==0)
{
printf("\n Get Drive Geometry Function Fails....");
printf("\n Extensions Not Supported, Press any Key to
Exit...");
getch();
exit(1);
}
return *g.sectors; /* Return The Number of
Sectors on Drive */
}
unsigned long file_size=0, i=0;
unsigned long start_file=0, end_file=0;
unsigned long Sectors_in_HDD2=0, loop=0;
char buffer[512], filename[80], temp[8];
char path[80];
unsigned int result,num=0;
|
page 1 | 2 | 3 | 4 | 5 | 6 |
|
|
|