Σχόλια στην κωδικοποίηση:
Η λειτουργία ενσωματώνει () είναι η πραγματική ενότητα της εκτέλεσης της αποκατάστασης του διευκρινισμένου χρήστης αρχείου, σε αυτό το πρόγραμμα αποκατάστασης.
Το όνομα αρχείων με την πορεία προορισμού για να αποθηκεύσει το ανακτημένο αρχείο αποθηκεύεται στο δείκτη * Filename_with_path χαρακτήρα. Εάν υπάρχει οποιοδήποτε λάθος στο άνοιγμα του αρχείου προορισμού, το μήνυμα λάθους επιδεικνύεται και ο χρήστης είναι γρήγορος πάλι για να εισαγάγει τον προορισμό.
Η λειτουργία _ bios_disk(_DISK_READ, &dinfo) διαβάζει τα στοιχεία του αρχείου από τον τομέα στοιχείων του τομέα των δίσκων από τον τομέα, που διευκρινίζεται από το dinfo δομών και που αποθηκεύεται στον απομονωτή στοιχείων buf. Αυτό το στοιχείο 512 ψηφιολέξεων γράφεται στο αρχείο προορισμού. Αυτό επαναλαμβάνεται έως ότου ενσωματώνεται το πλήρες αρχείο.
Το status=verify_the_sector λειτουργίας (κύλινδρος, κεφάλι, τομέας) ελέγχει τον τομέα που διαβάζεται. Εάν η θέση = 10, αυτό αντιπροσωπεύει έναν κακό τομέα (του 0xA). Η κωδικοποίηση της λειτουργίας έχει δοθεί κατωτέρω:
/// Ελέγξτε τον τομέα. (Κανένα στοιχείο δεν μεταφέρεται εδώ) \\\
int verify_the_sector(unsigned int c,unsigned int h,unsigned int s)
{
int status;
char *buf;
union REGS in, out;
struct SREGS sg;
in.h.ah = 0x04; /*Αριθμός λειτουργίας*/
in.h.al = 1; /* Αριθμός τομέων που ελέγχουν*/
in.h.dl = 0x00; /* Αριθμός κίνησης για το Α: */
in.h.ch = c; /* Αριθμός κυλίνδρων*/
in.h.dh = h; /* Επικεφαλής αριθμός*/
in.h.cl = s; /* Αριθμός τομέα*/
in.x.bx = FP_OFF(buf);/*Όφσετ*/
sg.es = FP_SEG(buf); /* Τμήμα */
int86x(0x13,&in,&out,&sg); /* Καλέστε τη λειτουργία 4H του INT 13H */
if(out.x.cflag)
{
status=out.h.ah;
}
return(status);
}
Σχόλια στην κωδικοποίηση:
Το verify_the_sector () λειτουργίας, ελέγχει τον τομέα που διαβάζεται από τη λειτουργία και επιστροφές τις _ bios_disk() τη θέση της λειτουργίας. Η λειτουργία χρησιμοποιεί το INT 13H και λειτουργία 4H για να ελέγξει τον τομέα.
* buf είναι ο απομονωτής στοιχείων, 0x04 είναι ο αριθμός λειτουργίας που διευκρινίζεται από in.h.ah = 0x04 και in.h.al = 1 καθοδηγεί για να ελεγχθεί ο ένας τομέας τη φορά in.h.dl = 0x00 χρησιμοποιείται για τον αριθμό κίνησης για την πλαδαρή κίνηση Α:, c,h, και s είναι αριθμοί κυλίνδρων, κεφαλιών και τομέα.
Η λειτουργία int86x () χρησιμοποιείται για να επικαλεσθεί το INT 13H (λειτουργία 4H) με τις τιμές καταλόγων τμήματος. Η θέση της λειτουργίας επιστρέφεται από τη θέση ακέραιων αριθμών.
|