Programma per trovare tutti i divisorii logici e le loro informazioni
Il programma che abbiamo discusso più presto era di leggere le informazioni del divisorio dalla tabella del divisorio di MBR. Ma appena soltanto leggendo il MBR, non possiamo ottenere le informazioni di altri divisorii logici che sono in divisorio esteso del disc.
Già abbiamo discusso che l'annotazione matrice del caricamento del sistema ha il limite di quattro voci nella Tabella matrice del divisorio. Comunque la posizione dell'annotazione matrice estesa del caricamento del sistema può essere ottenuta con l'aiuto dell'annotazione matrice del caricamento del sistema che contiene le Tabelle estese del divisorio, di cui la disposizione è esattamente la stessa a partire dalla Tabella principale del divisorio.
Tutti i divisorii estesi dovrebbero esistere all'interno dello spazio riservato dall'entrata estesa del divisorio. Soltanto due dei divisorii estesi sono significati per essere usati, i primi come divisorio normale ed il secondo come altro divisorio esteso se esiste.
Così con l'aiuto di una Tabella matrice del divisorio possiamo ottenere la posizione di un'altra Tabella matrice estesa del divisorio vicino esso, se presente.
Il seguente programma è per l'individuazione tutti i divisorii logici e delle loro informazioni dell'entrata del divisorio, leggendo MBR e MBRs esteso dal disc. La codificazione del programma è come segue:
/* Il programma per leggere i parametri di tutto il divisorio logico si presenta nel disc */
#include<dos.h>
char buffer[512], report_par[20];
unsigned drive_num =0x80;
unsigned long star_sec[20], sec;
/* La struttura della disposizione del pacchetto di indirizzo di disc, essere usato dai readabsolutesectors funziona */
struct diskaddrpacket
{
char packetsize ; /* Formato del pacchetto, generalmente 10H */
char reserved ; /* Riservato (0) */
int blockcount ; /* Numero di blocchi da trasferire */
char far *bufferaddress ; /* indirizzo per trasferire amplificatore */
unsigned long blocknumber[2] ; /* Iniziare numero di blocco assoluto */
} ;
void main()
{
int no_par,i;
clrscr();
no_par = 0;
All_partition_information(star_sec,&no_par,&sec,buffer,
report_par);
printf(" \n\n Divisorii totali in disc = %d\n ",
no_par);
for(i=0;i<no_par;i++)
{
printf("\n Iniziare numero del settore di divisorio %d =
%lu " , i+1, star_sec[i]);
}
printf("\n");
getch();
}
|