Hoofdstuk – 16
Meer hulpprogramma's voor schijven ontwikkelen
Invoering
In dit hoofdstuk zullen we bespreken hoe we de informatie van MBR, DBR, FAT en Root Directories kunnen gebruiken om hulpprogramma's te ontwikkelen die ons kunnen helpen bij het beheren van de gegevens, bij het optimaliseren van de opslag of bij het oplossen van problemen met schijven.
Meestal zijn deze programma's een oplossing voor een specifiek probleem. Sommige hulpprogramma's en hun programmering zijn in dit hoofdstuk besproken.
Partities verbergen
Over het algemeen wordt het hulpprogramma voor het verbergen van partities gebruikt door gebruikers die werken op een computersysteem dat door gebruikers wordt gebruikt. Als er veel gebruikers zijn voor dezelfde computer, is de kans groot dat gegevens van een andere gebruiker worden gelezen, gestolen of verwijderd.
In een dergelijk geval, waar de gebruiker belangrijke gegevens of vertrouwelijke informatie op dezelfde computer heeft, is hij misschien bereid de partitie waarin hij zijn gegevens heeft te verbergen op een zodanige manier dat de partitie niet toegankelijk is voor het Besturingssysteem. systeem, zodat het niet toegankelijk is voor andere gebruikers.
Als de gebruiker aan het systeem wil werken, kan hij de partitie terug openen door de partitie zichtbaar te maken. Over het algemeen vinden dit soort evenementen plaats in de professionele instellingen, waar de computers door veel studenten worden gebruikt, maar ouderejaarsstudenten maken zich altijd zorgen over hun belangrijke gegevens of projectwerk. Net als bij gebrek aan kennis, kan de nieuwe student zijn gegevens beschadigen of zelfs verwijderen.
Hoe de partitie verborgen wordt
De volgende tabel geeft de indeling van de partitie in de partitietabel van MBR weer:
Offset |
Meaning |
Size |
Description |
00H |
Boot Type Indicator Byte |
1 Byte |
If Byte is 00H, the Partition is Inactive and if Byte is 80H, The Partition is Active (or Bootable) |
01H |
Head Number of Beginning of the Partition |
1 Byte |
Starting Head number of the Partition in Hexadecimal System |
02H |
Sector and Cylinder Number of Beginning of the Partition |
2 Bytes |
6 Bits of First Byte make Starting Sector Number and Combination of remaining 2 Bits (as Two Most Significant Bits) plus 8 Bits of another Byte (Rest 8 least Significant Bits of the 10-Bit Number ) make the Starting Cylinder Number of the Partition |
04H |
File System indicator Byte |
1 Byte |
File System Indicator Byte in Hexadecimal system (for complete list of partition indicator bytes, refer the chapter “Logical Approach to Disks and OS” discussed earlier in this book) |
05H |
Head Number of End of the Partition |
1 Byte |
Ending Head Number of the Partition in Hexadecimal System |
06H |
Sector and Cylinder Number of End of the Partition |
2 Bytes |
6 Bits of First Byte make Ending Sector Number and Combination of remaining 2 Bits (as Two Most Significant Bits) plus 8 Bits of another Byte (Rest 8 least Significant Bits of the 10-Bit Number ) make the Ending Cylinder Number of the Partition |
08H |
Absolute Sector number of Beginning of the Partition |
4 Bytes |
Number of Sectors Between the MBR and the First Sector in the Partition |
0CH |
Absolute Sector number of End of the Partition |
4 Bytes |
Number of Sectors in the Partition |
|
|
Total = 16 Bytes |
|
Bij de offset 04H, in elke partitie-invoer, is er een indicatorbyte voor het bestandssysteem. Deze indicatorbyte vertegenwoordigt het type bestandssysteem van die partitie. Als de waarde van deze byte wordt gewijzigd, wordt de identiteit van de partitie gewijzigd.
De waarde van de partitie-indicatorbyte voor "DOS 12-Bit FAT" is bijvoorbeeld 0x01. Als deze waarde wordt gewijzigd in 0x11, wordt de identiteit van het bestandssysteem in de partitietabel gewijzigd in "Hidden DOS 12-Bit FAT" (voor een volledige lijst met partitie-indicatorbytes, raadpleeg het hoofdstuk "Logische benadering van schijven en besturingssysteem" besproken eerder in dit boek).
De hierna gegeven tabel toont nog enkele voorbeelden van bestandssysteemindicatorbyte voor sommige partitietypes:
Partition type indicator Byte |
Description of File System of Partition |
0x01 |
DOS 12–bit FAT |
0x11 |
Hidden DOS 12–bit FAT |
0x04 |
DOS 16–bit FAT (<=32MB) |
0x14 |
Hidden DOS 16–bit FAT (<=32MB) |
0x05 |
DOS Extended |
0x15 |
Hidden DOS Extended |
0x06 |
DOS 16–bit big (> 32MB) |
0x16 |
Hidden DOS 16–bit big (> 32MB) |
0x07 |
NTFS |
0x17 |
Hidden NTFS |
0x0B |
Windows FAT32 |
0x1B |
Hidden Windows FAT32 |
0x0C |
Windows FAT32 (LBA) |
0x1C |
Hidden Windows FAT32 (LBA) |
0x0E |
Windows FAT16 (LBA) |
0x1E |
Hidden Windows FAT16 (LBA) |
0x0F |
Windows Extended |
0x1F |
Hidden Windows Extended |
Hier zien we dat de corresponderende verborgen partitie voor elk bestandssysteem wordt gevonden door de waarde 0x10 toe te voegen aan de systeemindicatorbyte.
Hoewel het niet de vaste regel is om de partitie te verbergen, werkt het zelfs voor het grootste deel van het bestandssysteem. De reden hierachter is dat wanneer we de waarde van de partitie-indicatorbyte wijzigen, de identiteit van het bestandssysteem in de partitietabel wordt gewijzigd. En het komt zelden voor dat het nieuwe bestandssysteem ook door hetzelfde besturingssysteem wordt ondersteund.
Programma schrijven om partitie te verbergen
Het hierna gegeven programma wordt gebruikt om de partitie te verbergen met behulp van de partitie-ingang van die partitie uit de partitietabel van MBR. Als u andere logische partities in het uitgebreide volume wilt verbergen, moet u toegang krijgen tot de uitgebreide MBR's.
De codering van het programma is als volgt gegeven:
/* Programma om de partitie te verbergen met behulp van partitietabelinvoer van die partitie van MBR */
#include <bios.h>
#include <stdio.h>
int main(void)
{
struct diskinfo_t dinfo;
int result, tohide;
int i;
static char dbuf[512];/* Data Buffer to read-Write the
Sector information */
clrscr();
dinfo.drive = 0x80; /* drive number for First
Hard Disk */
dinfo.head = 0; /* disk head number */
dinfo.track = 0; /* track number */
dinfo.sector = 1; /* sector number */
dinfo.nsectors = 1; /* sector count */
dinfo.buffer = dbuf; /* data buffer */
/* Lees de eerste sector van de schijf */
result = _bios_disk(_DISK_READ, &dinfo);
if ((result & 0xff00) == 0)
{
printf("The Partition Codes of Four Partition Entries are,
0x%02x, 0x%02x, 0x%02x And 0x%02x.\n",
dbuf[450] & 0xff, dbuf[466] & 0xff,
dbuf[482] & 0xff, dbuf[498] & 0xff);
textcolor(15);
gotoxy(5,5);cprintf("Partition Entry in MBR is as
follows:");
gotoxy(10,7);cprintf("1. "); showtype(dbuf[450] & 0xff);
gotoxy(10,8);cprintf("2. "); showtype(dbuf[466] & 0xff);
gotoxy(10,9);cprintf("3. "); showtype(dbuf[482] & 0xff);
gotoxy(10,10);cprintf("4. "); showtype(dbuf[498] & 0xff);
/* krijg de gebruikersinvoer voor het verbergen van de partitie */
gotoxy(1,15);
printf("Enter The partition no. you want to hide,
Or Press any other key to Exit... ");
tohide=getche();
switch(tohide)
{
case '1': /* Hide First Partition in partition Table */
dbuf[450] = dbuf[450] +16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
case '2': /* Hide second Partition in partition Table */
dbuf[466] = dbuf[466]+16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
case '3': /* Hide third Partition in partition Table */
dbuf[482] = dbuf[482] +16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
case '4': /* Hide Fourth Partition in partition Table */
dbuf[498] = dbuf[498]+16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
default:
exit(0);
}
if ((result & 0xff00) == 0)
{
printf("\n\nThe New Partition Codes of Four Partition
Entries are, 0x%02x, 0x%02x, 0x%02x And 0x%02x.\n",
dbuf[450] & 0xff, dbuf[466] & 0xff,
dbuf[482] & 0xff, dbuf[498] & 0xff);
getch();
}
else
{
printf("Cannot Change the Byte, status = 0x%02x\n",
result);
getch();
}
}
return 0;
}
Opmerkingen over codering:
Het programma leest de indicatorbytes van het bestandssysteem van alle vier partitie-items in de partitietabel van MBR. De functie showtype( ) wordt gebruikt om de naam van het bestandssysteem te tonen voor de corresponderende waarde van de indicatorbyte van het bestandssysteem.
De gebruiker selecteert de partitie die moet worden verborgen in het menu dat op het scherm wordt weergegeven en vervolgens wordt 16 (0x10) toegevoegd aan de waarde van de bestandssysteemindicatorbyte van die partitie om deze te verbergen.
De codering van de functie showtype( ) is als volgt:
/* Functie om de naam van het bestandssysteem weer te geven die overeenkomt met de waarde van de bestandssysteemindicatorbyte */
showtype(i)
{
switch (i)
{
case 0x00 :cprintf("Empty"); break;
case 0x01 :cprintf("DOS 12-bit FAT"); break;
case 0x02 :cprintf("XENIX root"); break;
case 0x03 :cprintf("XENIX usr"); break;
case 0x04 :cprintf("DOS 16-bit <32M"); break;
case 0x05 :cprintf("Extended"); break;
case 0x06 :cprintf("DOS 16-bit >=32M"); break;
case 0x07 :cprintf("OS/2 HPFS"); break;
case 0x08 :cprintf("AIX"); break;
case 0x09 :cprintf("AIX bootable"); break;
case 0xa :cprintf("OS/2 Boot Manag"); break;
case 0xb :cprintf("Win95/98/ME FAT32"); break;
case 0xc :cprintf("Win95/98/ME FAT32 (LBA)"); break;
case 0xd :cprintf("Win95 FAT16"); break;
case 0xe :cprintf("Win95 FAT16 (LBA)"); break;
case 0xf :cprintf("Win95 Extended"); break;
case 0x11 :cprintf("Hidden FAT-12");break;
case 0x12 :cprintf("Compaq Diagnostics");break;
case 0x14 :cprintf("Hidden FAT-16 (<32)");break;
case 0x15 :cprintf("Hidden Extended");break;
case 0x16 :cprintf("Hidden FAT-16");break;
case 0x17 :cprintf("NTFS"); break;
case 0x40 :cprintf("Venix 80286"); break;
case 0x51 :cprintf("Novell?"); break;
case 0x52 :cprintf("Microport"); break;
case 0x63 :cprintf("GNU HURD"); break;
case 0x64 :
case 0x65 :cprintf("Novell Netware"); break;
case 0x75 :cprintf("PC/IX"); break;
case 0x80 :cprintf("Old MINIX"); break;
case 0x81 :cprintf("Linux/MINIX"); break;
case 0x82 :cprintf("Linux swap"); break;
case 0x83 :cprintf("Linux native"); break;
case 0x85 :cprintf("Linux Extended"); break;
case 0x93 :cprintf("Amoeba"); break;
case 0x94 :cprintf("Amoeba BBT"); break;
case 0xa5 :cprintf("BSD/386"); break;
case 0xa6 :cprintf("OpenBSD"); break;
case 0xa7 :cprintf("NEXTSTEP"); break;
case 0xb7 :cprintf("BSDI fs"); break;
case 0xb8 :cprintf("BSDI swap"); break;
case 0xc7 :cprintf("Syrinx"); break;
case 0xdb :cprintf("CP/M"); break;
case 0xe1 :cprintf("DOS access"); break;
case 0xe3 :cprintf("DOS R/O"); break;
case 0xf2 :cprintf("DOS secondary"); break;
case 0xff :cprintf("BBT"); break;
default :cprintf("UNKOWN");
}
return 0;
}
Programma schrijven om de partitie zichtbaar te maken
Het programma om de verborgen partitie zichtbaar te maken werkt precies tegenovergesteld aan het programma dat het programma verbergt. In dit programma trekken we 16 (0x10) af van de waarde van de bestandssysteemindicatorbyte van de verborgen partitie.
De codering van het programma is als volgt:
/* Programma om de partitie zichtbaar te maken die verborgen was door het vorige programma */
#include <bios.h>
#include <stdio.h>
int main(void)
{
struct diskinfo_t dinfo;
int result, tohide;
int i;
static char dbuf[512];/* Data buffer */
clrscr();
dinfo.drive = 0x80; /* drive number for
First Hard Disk */
dinfo.head = 0; /* disk head number */
dinfo.track = 0; /* track number */
dinfo.sector = 1; /* sector number */
dinfo.nsectors = 1; /* sector count */
dinfo.buffer = dbuf; /* data buffer */
result = _bios_disk(_DISK_READ, &dinfo);
if ((result & 0xff00) == 0)
{
printf("The Partition Codes of Four Partition
Entries are, 0x%02x, 0x%02x, 0x%02x And 0x%02x.\n",
dbuf[450] & 0xff, dbuf[466] & 0xff,
dbuf[482] & 0xff, dbuf[498] & 0xff);
textcolor(15);
gotoxy(5,5);
cprintf("Partition Entry in MBR is as follows:");
gotoxy(10,7);cprintf("1. "); showtype(dbuf[450] & 0xff);
gotoxy(10,8);cprintf("2. "); showtype(dbuf[466] & 0xff);
gotoxy(10,9);cprintf("3. "); showtype(dbuf[482] & 0xff);
gotoxy(10,10);cprintf("4. "); showtype(dbuf[498] & 0xff);
/* Verkrijg de invoer Gebruik om de partitie zichtbaar te maken */
gotoxy(1,15);printf("Enter The partition no., Which to
unhide, Or Press any other key to
Exit... ");
tohide=getche();
switch(tohide)
{
/* Eerste partitie van partitietabel zichtbaar maken */
case '1':
dbuf[450] = dbuf[450] -16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
/* Unhide second partition of partition table */
case '2':
dbuf[466] = dbuf[466]-16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
/* Unhide third partition of partition table */
case '3':
dbuf[482] = dbuf[482] -16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
/* Unhide fourth partition of partition table */
case '4':
dbuf[498] = dbuf[498]-16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
default:
exit(0);
}
if ((result & 0xff00) == 0)
{
printf("\n\nThe New Partition Codes of Four Partition
Entries are, 0x%02x, 0x%02x, 0x%02x And 0x%02x.\n",
dbuf[450] & 0xff, dbuf[466] & 0xff,
dbuf[482] & 0xff, dbuf[498] & 0xff);
getch();
}
else
{
printf("Cannot Change the Byte, status = 0x%02x\n",
result);
getch();
}
}
return 0;
}
Opmerkingen over het programma
Wees voorzichtig bij het geven van het partitienummer om zichtbaar te maken. Als het nummer van de partitie per ongeluk verkeerd is ingevoerd, wordt de bestandssysteeminformatie van die partitie gewijzigd en kan de partitie ontoegankelijk worden. Het eerder besproken programma om de partities te verbergen, kan u echter helpen om de indicatorbyte van het bestandssysteem van die partitie te herstellen.
Programma schrijven om partitie te verwijderen
Het programma om partities te verwijderen wordt gebruikt voor het oplossen van problemen. Neem bijvoorbeeld aan dat u de FAT32-bestandssysteempartities op uw schijf had. Nu heb je besloten om het LINUX-besturingssysteem tegelijkertijd op je schijf te installeren.
Indien van toepassing, wordt de installatie van het besturingssysteem tussendoor onderbroken, in het stadium waarin de wijzigingen werden aangebracht in de partitietabel van de MBR. In dergelijke gevallen zijn er veel mogelijkheden dat de partitie, waarin u het andere besturingssysteem zou installeren, ontoegankelijk wordt.
In dit geval wordt de schijfruimte van de verloren partitie onbruikbaar omdat deze ontoegankelijk is. Als we echter de partitie-informatie van die partitie op een of andere manier uit de partitietabel verwijderen, kunnen we deze ruimte weer bruikbaar maken met het FDISK-commando van DOS.
Het programma om de partitie-invoer uit de partitietabel van MBR te verwijderen is als volgt gegeven:
/* Programma om de tweede partitie-ingang te verwijderen uit de partitietabel van MBR */
# include <bios.h>
/* structure to read the partition entry from partition table */
struct partition
{
/* Active Partition Byte */
unsigned char bootable ;
/* Starting Head */
unsigned char start_side ;
/* combination of Starting sector and cylinder number */
unsigned int start_sec_cyl ;
/* File system Indicator Byte */
unsigned char parttype ;
/* Ending Head */
unsigned char end_side ;
/* combination of Starting sector and cylinder number */
unsigned int end_sec_cyl ;
/* Relative Sector Number */
unsigned long part_beg ;
/* Partition length in sectors */
unsigned long plen ;
} ;
/* Structure to read-write MBR */
struct part
{
/* IPL (Initial Program Loader) */
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(); /* Display the information of partition
table after modification */
getch();
}
Opmerkingen over het programma:
Maak een commentaar op de biosdisk ( 3, 0x80, 0, 0, 1, 1, &p ) functie om de tweede partitie uit de partitietabel van MBR te verwijderen.
Om de partitie te verwijderen, worden alle parameters ervan op 0 gezet in de partitietabel in MBR. Onthoud altijd dat als u de uitgebreide partitie verwijdert, alle logische partities van die uitgebreide partitie ook ontoegankelijk worden.
De functieweergave( ) wordt gebruikt om de partitietabel van MBR weer te geven. De codering van de functie is als volgt:
/* Functie om partitietabel van MBR . weer te geven */
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;
}
“Track 0 Bad” diskette formatteren
Dit programma wordt gebruikt om diskettes te formatteren die slechte sectoren op hun spoor 0 hebben en wanneer ze zijn geformatteerd met DOS of Windows, geven ze foutmeldingen weer zoals "Track 0 BAD". Je kunt het echter ook gebruiken om normale diskettes te formatteren.
De codering van het programma staat op de schijf die bij dit boek is geleverd met de naam “TTFORMAT.C”. De werkende logica van het programma is hetzelfde als het programma gepubliceerd in PCQUEST computermagazine, in de editie van februari 2003.
In dit programma proberen we dit type diskettes herbruikbaar te maken door ze te formatteren. Het programma klinkt dat je de floppydisk aankunt, zelfs met een paar slechte sectoren erop. Als de eerste sector van de schijf echter defect is, kan de diskette niet worden geformatteerd.
Het programma herschrijft alle DBR-, FAT- en Root Directory-informatie. Als er slechte sectoren op het oppervlak van de schijf zijn, worden deze gemarkeerd als slecht in FAT.
In de codering van het programma wordt de structuur BPB gebruikt om het BIOS-parameterblok van de DBR te schrijven. De structuur boot_sector wordt gebruikt om de DBR van de schijf te schrijven. De structuur address_field wordt gebruikt voor interactie met het aantal cilinders, koppen en sectoren per spoor en met de grootte van de sector.
Verschillende functies die worden gebruikt bij de codering van het programma en hun beschrijving zijn gegeven in de onderstaande tabel.
Het volumeserienummer van de diskette wordt door de DOS berekend op basis van de huidige datum en tijd van de systeemklok.
Het eerste deel van het serienummer wordt berekend door de som van de tijd (seconden en honderdsten van een seconde) en de datum (maand en dag). Het tweede deel van het serienummer is gelijk aan de som van de tijd (uren en minuten) en datum (jaar).
Alle berekeningen worden uitgevoerd in een hexadecimaal systeem. Laten we bijvoorbeeld aannemen dat u de diskette in DOS-omgeving hebt geformatteerd om 11:16:28:65 op 23-10-2003. Laten we nu het serienummer van de schijf berekenen.
The time in (seconds and Hundredths of seconds) format is
= (28 and 65)
= (1CH and 41H)
Write it as 1C41
Similarly, date in (month and day) format is
= (10 and 23)
= (0AH and 17H)
Write it as 0A17
Similarly, time in (hours and minutes) format is,
= (11 and 16)
= (0BH and 10H)
Write it as 0B10
And the year will be
= 2003
= 07D3
Laten we nu het serienummer van de floppydisk berekenen, volgens de eerder gegeven beschrijving. Het eerste deel van het serienummer is (1C41 + 0A17) = 2658 en het tweede deel van het serienummer is (0B10 + 07D3) = 12E3.
De schijfbewerkingstool schrijven
De codering van het schijfbewerkingsprogramma is gegeven op de schijf die bij dit boek is geleverd, met de bestandsnaam "TTEDITOR.C". U kunt dit programma gebruiken om het oppervlak van harde schijven of diskettes te analyseren. Zelfs het grootste deel van de studie tijdens het schrijven van dit boek heb ik TTEDITOR gebruikt om het schijfoppervlak te analyseren of de schijfaanpassingen uit te voeren.
Enkele van de belangrijke taken die dit bewerkingsprogramma kan uitvoeren, zijn de volgende:
- Lees per sector informatie van het oppervlak van harde schijven en diskettes.
- Schrijf de back-up van elke sector naar het bestand.
- Herstel de gegevens van de sector uit het bestand.
- Wijzig de enkele byte.
- Hexadecimaal naar decimale en binaire rekenmachine.
Het programma gebruikt de biosdisk( ) en _bios_disk() functie om toegang te krijgen tot de schijven. Als u de schijf buiten de 8,4 GB wilt analyseren, wijzigt u het programma met behulp van extensies van INT 13H. De beschrijving van de functies die in het programma worden gebruikt, is gegeven in de volgende tabel:
Function |
Description |
bkground( ) |
creates the back ground and frame of first screen |
clsline( ) |
Used to clear the complete row from the screen specified by row number. |
refresh( ) |
Function to recall all the display functions on the screen |
writetofile( ) |
Function to write the data of a sector to user defined file. |
writetosector( ) |
Function to restore the sector from specified file. |
msgdisp( ) |
Function to display messages on the screen. |
modify( ) |
Function to modify a single byte of any sector, specified by user. |
frame( ) |
Function to draw the frame structure of sector display |
dispmax( ) |
Display maximum CHS number of the disk (Valid Up to 8.4 GB Disk) |
display( ) |
Display the sector and information on the screen. |
hextodec( ) |
Function to Calculate hexadecimal number to corresponding decimal and binary numbers. |
Pagina aangepast op: 18/01/2022