Πρόγραμμα για να βρεθούν όλα τα λογικά χωρίσματα και οι πληροφορίες τους
Το πρόγραμμα που συζητήσαμε νωρίτερα επρόκειτο να διαβάσει τις πληροφορίες χωρισμάτων από τον πίνακα χωρισμάτων MBR. Αλλά ακριβώς μόνο με την ανάγνωση του MBR, δεν μπορούμε να πάρουμε τις πληροφορίες άλλων λογικών χωρισμάτων που είναι στο εκτεταμένο χώρισμα του δίσκου.
Ήδη έχουμε συζητήσει ότι το κύριο αρχείο μποτών έχει το όριο τεσσάρων καταχωρήσεων στον κύριο πίνακα χωρισμάτων. Εντούτοις η θέση του εκτεταμένου κύριου αρχείου μποτών μπορεί να ληφθεί με τη βοήθεια του κύριου αρχείου μποτών που περιέχει τους εκτεταμένους πίνακες χωρισμάτων, το των οποίων σχήμα είναι ακριβώς το ίδιο από τον κύριο πίνακα χωρισμάτων.
Όλα τα εκτεταμένα χωρίσματα πρέπει να υπάρξουν μέσα στο διάστημα που διατηρείται από την εκτεταμένη είσοδο χωρισμάτων. Μόνο δύο από τα εκτεταμένα χωρίσματα προορίζονται να χρησιμοποιηθούν, ο πρώτος ως κανονικό χώρισμα και ο δεύτερος όπως ένα άλλο εκτεταμένο χώρισμα εάν υπάρχει.
Κατά συνέπεια με τη βοήθεια ενός κύριου πίνακα χωρισμάτων μπορούμε να πάρουμε τη θέση ενός άλλου εκτεταμένου κύριου πίνακα χωρισμάτων δίπλα σε το, εάν παρόν.
Το ακόλουθο πρόγραμμα είναι για την εύρεση όλων των λογικών χωρισμάτων και των πληροφοριών εισόδων χωρισμάτων τους, διαβάζοντας MBR και εκτεταμένο MBRs από το δίσκο. Η κωδικοποίηση του προγράμματος είναι η ακόλουθη:
/* Πρόγραμμα για να διαβαστούν οι παράμετροι όλου του λογικού χωρίσματος παρόντος στο δίσκο*/
#include<dos.h>
char buffer[512], report_par[20];
unsigned drive_num =0x80;
unsigned long star_sec[20], sec;
/* Δομή του σχήματος πακέτων διευθύνσεων δίσκων, που χρησιμοποιείται από τη λειτουργία readabsolutesectors */
struct diskaddrpacket
{
char packetsize ; /*Μέγεθος του πακέτου, γενικά 10H */
char reserved ; /* Διατηρημένο (0)*/
int blockcount ; /* Αριθμός φραγμών στη μεταφορά */
char far *bufferaddress ; /* διεύθυνση για να μεταφέρει τον απομονωτή */
unsigned long blocknumber[2] ; /*Αρχικός απόλυτος αριθμός φραγμών */
} ;
void main()
{
int no_par,i;
clrscr();
no_par = 0;
All_partition_information(star_sec,&no_par,&sec,buffer,
report_par);
printf(" \n\n Συνολικά χωρίσματα στο δίσκο = %d\n ",
no_par);
for(i=0;i<no_par;i++)
{
printf("\n Αρχικός αριθμός τομέα χωρίσματος %d =
%lu " , i+1, star_sec[i]);
}
printf("\n");
getch();
}
|