Πώς να χρησιμοποιήσουμε τις επεκτάσεις INT 13H στον προγραμματισμό γ, μπορούμε να καλέσουμε τις λειτουργίες επέκτασης του INT 13H με τις ίδιες λειτουργίες γ (int86(), int86x () κ.λπ....) , το οποίο χρησιμοποιούσαμε στα προηγούμενα κεφάλαια. Το ακόλουθο παράδειγμα δίνει τη σημασία στις τρεις λειτουργίες (οι επεκτάσεις ελέγχου παρούσες, εκτεινόμενες διαβασμένος και εκτεταμένες γράφουν)

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

Πώς να χρησιμοποιήσει τις επεκτάσεις INT 13H στον προγραμματισμό γ

Μπορούμε να καλέσουμε τις λειτουργίες επέκτασης του INT 13H με τις ίδιες λειτουργίες γ (int86(), int86x () κ.λπ....) , το οποίο χρησιμοποιούσαμε στα προηγούμενα κεφάλαια. Το μάθετε από ένα παράδειγμα.

Το ακόλουθο παράδειγμα δίνει τη σημασία στις τρεις λειτουργίες (οι επεκτάσεις ελέγχου παρούσες, εκτεινόμενες διαβασμένος και εκτεταμένες γράφουν). Εντούτοις δεν πρόκειται να χρησιμοποιήσουμε εκτεταμένος γράφουμε τη λειτουργία σε αυτό το κεφάλαιο.

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

Οι πρώτοι έλεγχοι προγράμματος εάν οι επεκτάσεις υποστηρίζονται ή όχι εάν οι επεκτάσεις είναι παρούσες για το INT 13H, αυτό διαβάζουν τον απόλυτο τομέα 0 (έτσι MBR) του δίσκου. Η κωδικοποίηση του προγράμματος προχωρά με τον ακόλουθο τρόπο:

/* Πρόγραμμα για να προσεγγιστούν οι τομείς πέρα από 8,46 ΜΒ χρησιμοποιώντας τις επεκτάσεις ΖΩΝΤΑΝΟΎ ΟΝΤΟΣ INT 13 */

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

/* Ορίζει το προσδιοριστικό στον τύπο στοιχείων */
typedef unsigned char Byte;
typedef unsigned int Word;
typedef unsigned long DWord;

/* disk_packet structure φορτώνεται σε DS:SI και την εντολή που εκτελούνται */

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

/* Διεύθυνση με το σχήμα :Segment Offset */
Word offset; //offset address
Word segment; //segment address

/* Για να υποστηρίξει το δίσκο ακόμη και της ικανότητας 1152921504.607 GB */

DWord lba1;
DWord lba2;
}disk_pack;

/* Λειτουργία που ελέγχει εάν οι επεκτάσεις υποστηρίζονται */

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)
{
/* Που δεν υποστηρίζεται επέκταση */
printf("\nBios extension not supported");
exit(1);
}

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

/* Επέκταση παρούσα */
printf("\nExtended I/O supported");
}

/* Λειτουργία για να διαβάσει τον τομέα */

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

/* αίτημα για MBR του σκληρού δίσκου 1 */
/* Διαβάστε τον απόλυτο τομέα 0 */

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

/* Require(kanonjka' οδηγούμε < 2,1 T.B) για να θέσουμε μόνο αυτό */

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");
}

//// Γράψτε τη λειτουργία τομέα \\\\

void write_sector()
{

/* Θα γραφτεί με τον ίδιο τρόπο όπως τα read_sectors λειτουργούν, εκτός από τον αριθμό λειτουργίας, ο οποίος θα είναι 0x43 σε αυτήν την λειτουργία. Θα συζητήσουμε εκτεταμένος γράφουμε τη λειτουργία στα επόμενα κεφάλαια.

Πρίν χρησιμοποιεί αυτήν την λειτουργία παρακαλώ ελέγξτε και ελέγξτε αυτό που είναι εσείς που πηγαίνετε να κάνει. Πρέπει να έχετε την κατάλληλη γνώση αυτού που πρόκειται να κάνετε. Η χρήση αυτής της λειτουργίας στην έλλειψη γνώσης ή μπορεί απρόσεκτα να καταστρέψει τα στοιχεία σας. */

}

/// Κύρια λειτουργία \\\\
void main()
{
int i=0;

/* απομονωτής για να κρατήσει MBR */
Byte mbr[512];
clrscr();

/* έλεγχος για την επέκταση ΖΩΝΤΑΝΟΥ ΟΝΤΟΣ παρούσα */
check_ext_present();

/* διαβάστε τον τομέα */
read_sectors(&mbr);

printf("\n\n Data of MBR \n");
printf("▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n\n\n");
while(i++<512)
{
/* επιδείξτε τον απομονωτή MBR */
printf("%c",mbr[i]);
}
}

 

Σχόλια στην κωδικοποίηση του προγράμματος

typedef ορίζει το προσδιοριστικό στον τύπο στοιχείων έτσι ώστε typedef ανυπόγραφη ψηφιολέξη προσροφητικών ανθράκων ορίζει την ψηφιολέξη προσδιοριστικών για τον προσροφητικό άνθρακα τύπων στοιχείων. Ομοίως το προσδιοριστικό Word ορίζεται στο INT και DWord ορίζεται πολύ.

Η δομή disk_packet φορτώνεται σε DS:SI και την εντολή (όπως εκτεινόμενος διαβασμένος, εκτεταμένος γράψτε ή ελέγξτε κ.λπ....) εκτελείται. Δείτε τις λειτουργίες των επεκτάσεων της ΙΒΜ/κρατών μελών INT 13H (λειτουργία 41H για να λειτουργήσει 49H) που δίνονται πριν.

Οι check_ext_present έλεγχοι λειτουργίας () εάν οι επεκτάσεις είναι διαθέσιμες/υποστηριγμένες ή όχι. Η λειτουργία καλείται με BX=55AAH (inregs.x.bx=0x55AA) και εάν οι επεκτάσεις υποστηρίζονται ο κατάλογος BX τίθεται AA55H. (Βλ. τη λειτουργία 41H που δίνεται πριν)

Τα read_sectors λειτουργίας χρησιμοποιούνται για να διαβάσουν τον απόλυτο τομέα του δίσκου, καθορισμένο από disk_pack.lba1. Σε αυτό το πρόγραμμα έχουμε δώσει disk_pack.lba1=0, κατά συνέπεια πρόκειται να διαβάσουμε τον απόλυτο τομέα 0 (Δείτε τη σημείωση κατωτέρω) πηγαίνοντας έτσι να διαβάσουμε το MBR του δίσκου.

Η λειτουργία write_sector είναι επίσης ίδια όπως τα read_sectors λειτουργούν και θα γραφτούν με τον ίδιο τρόπο αλλά με τις διαφορετικές επιλογές λειτουργίας. Θα τον χρησιμοποιήσουμε στα επόμενα κεφάλαια.

Note:

Διαβάζουμε τους τομείς των δίσκων με τους ακόλουθους δύο τρόπους:

  1. Σχετικός τομέας που διαβάζεται (ή γράψτε)
  2. Απόλυτος τομέας που διαβάζεται (ή γράψτε)

Στο σχετικό τομέα που διαβάζεται διαβάζουμε τους τομείς των δίσκων σύμφωνα με (κύλινδρος, κεφάλι και τομέας) τη γεωμετρία CHS του δίσκου. Στο σχετικό τομέα που διαβάζεται το MBR του δίσκου (πρώτος τομέας του δίσκου) είναι στον κύλινδρο 0, το κεφάλι 0 και τον τομέα 1.

Στην απόλυτη ανάγνωση των τομέων των δίσκων, δεν πρέπει να διευκρινίσουμε τον κύλινδρο ή τους επικεφαλής αριθμούς στο πρόγραμμά μας. Οι απόλυτοι τομείς μετριούνται από τον απόλυτο τομέα 0.

Κατά συνέπεια εάν πρόκειται να διαβάσουμε το MBR του δίσκου (πρώτος τομέας του δίσκου), πρόκειται να διαβάσουμε τον απόλυτο τομέα 0. Είναι η εργασία του ΖΩΝΤΑΝΟΥ ΟΝΤΟΣ για να μετατρέψει τον απόλυτο αριθμό τομέα στον αντίστοιχους κύλινδρο, το κεφάλι και τον αριθμό τομέα του.

Όπως στην απόλυτη ανάγνωση τομέα (ή γράψιμο), πρέπει να υπολογίσουμε μόνο τους απόλυτους τομείς μέσα στο βρόχο στις διαδικασίες όπως η ολόκληρη ανάγνωση δίσκων ή γράφοντας, ενώ σε περίπτωση σχετικής ανάγνωσης τομέα (ή γράψιμο), πρέπει να τρέξουμε τρεις βρόχους τη φορά για τον υπολογισμό CHS επομένως η απόλυτη ανάγνωση τομέα/το γράψιμο είναι πολύ γρηγορότερες από τη σχετική ανάγνωση τομέα/γράψιμο.

Παραδείγματος χάριν, εάν έχουμε οποιοδήποτε σκληρό δίσκο με τα 16 κεφάλια (πλευρές), 12 κύλινδροι και με 63 τομείς, ο πίνακας που δίνεται έπειτα, παρουσιάζουν τη διαδικασία και διαφορά και των μεθόδων ανάγνωσης και επιδεικνύουν έτσι πώς η απόλυτη προσέγγιση τομέα μπορεί να βρεί το χρόνο μας που παίρνει τα προγράμματα (όπως η ολόκληρο ανάγνωση δίσκων/το γράψιμο ή τα ολόκληρα προγράμματα σκουπίσματος δίσκων κ.λπ....) για να τρέξει πολύ γρηγορότερα:

Σχετική ανάγνωση τομέων

Απόλυτη ανάγνωση τομέα

Κύλινδρος = 0, κεφάλι = 0, τομέας = 1

Απόλυτος τομέας = 0

Κύλινδρος = 0, κεφάλι = 0, τομέας = 2

Απόλυτος τομέας = 1

Κύλινδρος = 0, κεφάλι = 0, τομέας = 3

Απόλυτος τομέας = 2

.
.
.
.

.
.
.
.

Κύλινδρος = 0, κεφάλι = 0, τομέας = 62

Απόλυτος τομέας = 61

Κύλινδρος = 0, κεφάλι = 0, τομέας = 63

Απόλυτος τομέας = 62

Κύλινδρος = 0, κεφάλι = 1, τομέας = 1

Απόλυτος τομέας = 63

Κύλινδρος = 0, κεφάλι = 1, τομέας = 2

Απόλυτος τομέας = 64

Κύλινδρος = 0, κεφάλι = 1, τομέας = 3

Απόλυτος τομέας = 65

Κύλινδρος = 0, κεφάλι = 1, τομέας = 4

Απόλυτος τομέας = 66

.
.
.
.

.
.
.
.

Κύλινδρος = 0, κεφάλι = 1, τομέας = 63

Απόλυτος τομέας = 125

Κύλινδρος = 0, κεφάλι = 2, τομέας = 1

Απόλυτος τομέας = 126

Κύλινδρος = 0, κεφάλι = 2, τομέας = 2

Απόλυτος τομέας = 127

Κύλινδρος = 0, κεφάλι = 2, τομέας = 3

Απόλυτος τομέας = 128

.
.
.
.

.
.
.
.

Κύλινδρος = 0, κεφάλι = 15, τομέας = 63

Απόλυτος τομέας = 1007

Κύλινδρος = 1, κεφάλι = 0, τομέας = 1

Απόλυτος τομέας = 1008

Κύλινδρος = 1, κεφάλι = 0, τομέας = 2

Απόλυτος τομέας = 1009

Κύλινδρος = 1, κεφάλι = 0, τομέας = 3

Απόλυτος τομέας = 1010

.
.
.
.

.
.
.
.

Κύλινδρος = 1, κεφάλι = 0, τομέας = 63

Απόλυτος τομέας = 1070

Κύλινδρος = 1, κεφάλι = 1, τομέας = 1

Απόλυτος τομέας = 1071

Κύλινδρος = 1, κεφάλι = 1, τομέας = 2

Απόλυτος τομέας = 1072

Κύλινδρος = 1, κεφάλι = 1, τομέας = 3

Απόλυτος τομέας = 1073

.
.
.
.

.
.
.
.

Κύλινδρος = 1, κεφάλι = 15, τομέας = 63

Απόλυτος τομέας = 2015

Κύλινδρος = 2, κεφάλι = 0, τομέας = 1

Απόλυτος τομέας = 2016

Κύλινδρος = 2, κεφάλι = 0, τομέας = 2

Απόλυτος τομέας = 2017

Κύλινδρος = 2, κεφάλι = 0, τομέας = 3

Απόλυτος τομέας = 2018

.
.
.
.

.
.
.
.

Κύλινδρος = 11, κεφάλι = 15, τομέας = 60

Απόλυτος τομέας = 12092

Κύλινδρος = 11, κεφάλι = 15, τομέας = 61

Απόλυτος τομέας = 12093

Κύλινδρος = 11, κεφάλι = 15, τομέας = 62

Απόλυτος τομέας = 12094

Κύλινδρος = 11, κεφάλι = 15, τομέας = 63

Απόλυτος τομέας = 12095

 

Οι πληροφορίες του πίνακα χωρισμάτων MBR, που επιδεικνύεται από οποιοδήποτε δίσκο MBR που αναλύει το εργαλείο, έχουν δοθεί κατωτέρω:

Στις ανωτέρω πληροφορίες, οι σχετικοί αριθμοί τομέα για την έναρξη και των δύο χωρισμάτων είναι 63 και 11277630 αντίστοιχα, τα οποία είναι απαλλαγμένα από τα χωρίσματα και μετριούνται σύμφωνα με τον αριθμό τομέων, διαθέσιμος στο δίσκο.

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