Πρόγραμμα γραψίματος για να διαγραφεί το χώρισμα
Το πρόγραμμα για να διαγραφεί το χώρισμα χρησιμοποιείται για το σκοπό ανίχνευσης λαθών. Παραδείγματος χάριν, υποθέστε ότι είχατε τα χωρίσματα συστημάτων αρχείων FAT32 στο δίσκο σας. Τώρα αποφασίσατε να εγκαταστήσετε το λειτουργικό σύστημα LINUX στο δίσκο σας ταυτόχρονα.
Εάν οποιοιδήποτε πώς, η εγκατάσταση του λειτουργικού συστήματος διακόπτεται ενδιάμεσα, στο στάδιο όταν γίνονταν οι τροποποιήσεις στον πίνακα χωρισμάτων του MBR. Σε τέτοιες περιπτώσεις υπάρχουν πολλές δυνατότητες ότι το χώρισμα, στο οποίο επρόκειτο να εγκαταστήσετε το άλλο λειτουργικό σύστημα, γίνεται απρόσιτο.
Σε αυτήν την περίπτωση το διάστημα δίσκων του χαμένου χωρίσματος γίνεται άχρηστο οφειλόμενο στην ύπαρξη απρόσιτο. Εντούτοις εάν διαγράφουμε τις πληροφορίες χωρισμάτων εκείνου του χωρίσματος από τον πίνακα χωρισμάτων οποιοιδήποτε πώς, μπορούμε πάλι να κάνουμε αυτήν την διαστημική χρησιμοποιήσιμη χρησιμοποιώντας εντολή FDISK του DOS.
Το πρόγραμμα για να διαγραφεί το λήμμα χωρισμάτων από τον πίνακα χωρισμάτων MBR έχει δοθεί έπειτα:
/* Πρόγραμμα για να διαγραφεί το δεύτερο λήμμα χωρισμάτων από τον πίνακα χωρισμάτων MBR */
# include <bios.h>
/* δομή για να διαβάσει την είσοδο χωρισμάτων από τον πίνακα χωρισμάτων */
struct partition
{
/* Ενεργός ψηφιολέξη χωρισμάτων */
unsigned char bootable ;
/* Starting Head */
unsigned char start_side ;
/* συνδυασμός αρχικού αριθμού τομέα και κυλίνδρων */
unsigned int start_sec_cyl ;
/* File system Indicator Byte */
unsigned char parttype ;
/* Ending Head */
unsigned char end_side ;
/* συνδυασμός αρχικού αριθμού τομέα και κυλίνδρων */
unsigned int end_sec_cyl ;
/* Σχετικός αριθμός τομέα */
unsigned long part_beg ;
/* Μήκος χωρισμάτων στους τομείς */
unsigned long plen ;
} ;
/* Δομή σε ανάγνωσες-γραφής MBR */
struct part
{
/* Ipl (αρχικός φορτωτής προγράμματος) */
unsigned char master_boot[446] ;
/* Partition table */
struct partition pt[4] ;
/* Magic Number */
int lasttwo ;
} ;
struct part p ;
void main()
{
unsigned int t1,t2;
clrscr();
biosdisk ( 2, 0x80, 0, 0, 1, 1, &p ) ;
display(); /* display the information of
Partition table */
getch();
p.pt[1].bootable = 0;
p.pt[1].start_side = 0 ;
p.pt[1].start_sec_cyl = 0 ;
p.pt[1].parttype = 0;
p.pt[1].end_side = 0;
p.pt[1].end_sec_cyl = 0;
p.pt[1].part_beg = 0;
p.pt[1].plen = 0;
printf("\n\n\n After Deleting the Second Partition
Entry From MBR Partition Table,");
printf("\n The Partition Table will Be Changed as
Follows: ");
/* To Delete Second Partition Information from partition
table of MBR Remove the forward slashes from the
biosdisk( ) function. Do not use Carelessly, Partition
information of Second Partition of Partition Table will
be Erased Completely. */
////// biosdisk ( 3, 0x80, 0, 0, 1, 1, &p ) ;
display(); /* Επιδείξτε τις πληροφορίες του χωρίσματος
πίνακας μετά από την τροποποίηση */
getch();
}
Σχόλια στο πρόγραμμα:
Uncomment η λειτουργία biosdisk (3, 0x80, 0 ..0 ..1 ..1, &p) για να διαγράψει το δεύτερο χώρισμα από τον πίνακα χωρισμάτων MBR.
Για να διαγράψουν το χώρισμα, όλες οι παράμετροι από το, τίθενται ως στόχος 0 στο επιτραπέζιο λήμμα χωρισμάτων σε MBR. Πάντα θυμηθείτε ότι εάν διαγράψετε το εκτεταμένο χώρισμα, όλα τα λογικά χωρίσματα εκείνου του εκτεταμένου χωρίσματος θα γίνουν επίσης απρόσιτα.
Η λειτουργία display() χρησιμοποιείται για να επιδείξει τον πίνακα χωρισμάτων MBR. Η κωδικοποίηση της λειτουργίας είναι η ακόλουθη:
/* Λειτουργία στον πίνακα χωρισμάτων επίδειξης MBR */
display()
{
unsigned int s_sec, s_trk, e_sec, e_trk, i, t1, t2 ;
char type[20], boot[5] ;
printf("\n\nPart. Boot Starting location Ending Location
Relative Number of");
printf("\nType Side Cylinder Sector Side Cylinder
Sector Sectors Sectors\n");
for ( i = 0 ; i <= 3 ; i++ )
{
if ( p.pt[i].bootable == 0x80 )
strcpy ( boot, "Yes" ) ;
else
strcpy ( boot, "No" ) ;
switch ( p.pt[i].parttype )
{
case 0x00 :
strcpy ( type, "Unused" ) ; break ;
case 0x1 :
strcpy ( type, "FAT12" ) ; break ;
case 0x2 :
strcpy ( type, "Xenix" ) ; break ;
case 0x3 :
strcpy ( type, "Xenix:usr" ) ; break ;
case 0x4 :
strcpy ( type, "FAT16<32M" ) ; break ;
case 0x5 :
strcpy ( type, "DOS-Ext." ) ; break ;
case 0x6 :
strcpy ( type, "FAT16>32M" ) ; break ;
case 0x7 :
strcpy ( type, "NTFS" ) ; break ;
case 0x0b :
strcpy ( type, "FAT32" ) ; break ;
case 0x0c :
strcpy ( type, "FAT32-LBA" ) ; break ;
case 0x0d :
strcpy ( type, "VFAT16" ) ; break ;
case 0x0e :
strcpy ( type, "VFAT16-LBA" ) ; break ;
case 0x0f :
strcpy ( type, "FAT EXT" ) ; break ;
case 0x17 :
strcpy ( type, "HPFS" ) ; break ;
case 0x81 :
strcpy ( type, "Old LINUX" ) ; break ;
case 0x82 :
strcpy ( type, "LinuxSwap" ) ; break ;
case 0x83 :
strcpy ( type, "LinuxNative" ) ; break ;
case 0x85 :
strcpy ( type, "Linux Ext." ) ; break ;
default :
strcpy ( type, "Unknown" ) ; break ;
}
s_sec = ( p.pt[i].start_sec_cyl & 0x3f ) ;
t1 = ( p.pt[i].start_sec_cyl & 0xff00 ) >> 8 ;
t2 = ( p.pt[i].start_sec_cyl & 0x00c0 ) << 2 ;
s_trk = t1 | t2 ;
e_sec = ( p.pt[i].end_sec_cyl & 0x3f ) ;
t1 = ( p.pt[i].end_sec_cyl & 0xff00 ) >> 8 ;
t2 = ( p.pt[i].end_sec_cyl & 0x00c0 ) << 2 ;
e_trk = t1 | t2 ;
printf ( "\n%6s %3s", type, boot ) ;
printf ( "%4d %6d %8d", p.pt[i].start_side,
s_trk,s_sec ) ;
printf ( "%7d %6u %8u", p.pt[i].end_side, e_trk,
e_sec ) ;
printf ( " %10lu %10lu", p.pt[i].part_beg,
p.pt[i].plen ) ;
}
return 0;
}
|
page 1 | 2 | 3 | 4 | 5 | 6 |
|
|
|