章 – 16
ディスク用のユーティリティの開発
序章
この章では、MBR、DBR、FAT、およびルートディレクトリの情報を使用して、データの管理、ストレージの最適化、またはディスクのトラブルシューティングタスクに役立つユーティリティプログラムを開発する方法について説明します。
通常、これらのプログラムは特定の問題の解決策です。この章では、いくつかのユーティリティプログラムとそのプログラミングについて説明しました。
パーティションを非表示にする
一般に、パーティション隠蔽ユーティリティは、ユーザーが使用するそのようなコンピュータシステムで作業するユーザーによって使用されます。同じコンピュータに多数のユーザーがいる場合、別のユーザーのデータが読み取られたり、盗まれたり、削除されたりする可能性が高くなります。
このような場合、ユーザーが同じコンピューターに重要なデータや機密情報を持っている場合、オペレーティングシステムがパーティションにアクセスしないように、ユーザーがデータを持っているパーティションを非表示にすることをいとわない場合があります。他のユーザーがアクセスできないようにするため。
ユーザーがシステムで作業したい場合は、パーティションを非表示にするだけで、パーティションにアクセスできます。一般的に、この種のイベントは専門機関で行われ、多くの学生がコンピューターを使用していますが、上級生は常に重要なデータやプロジェクトの作業について心配しています。知識が不足しているため、新入生はデータを傷つけたり、削除したりする可能性があります。
パーティションが非表示になる方法
次の表は、MBRのパーティションテーブルのパーティションの形式を表しています。
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 |
|
オフセット04Hには、すべてのパーティションエントリにファイルシステムインジケータバイトがあります。この標識バイトは、そのパーティションのファイルシステムのタイプを表します。このバイトの値が変更されると、パーティションのIDが変更されます。
たとえば、「DOS12ビットFAT」のパーティションインジケータバイトの値は0x01です。この値を0x11に変更すると、パーティションテーブルエントリのファイルシステムのIDが「HiddenDOS 12-Bit FAT」に変更されます(パーティションインジケータバイトの完全なリストについては、「ディスクとOSへの論理的アプローチ」の章を参照してください)。この本の前半)。
次に示す表は、いくつかのパーティションタイプのファイルシステムインジケータバイトの例を示しています。
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 |
ここでは、システムインジケータバイトに値0x10を追加することで、任意のファイルシステムに対応する非表示のパーティションが見つかることがわかります。
パーティションを非表示にするための厳格なルールではありませんが、ほとんどのファイルシステムでも機能します。その背後にある理由は、パーティションインジケータバイトの値を変更すると、パーティションテーブルエントリのファイルシステムのIDが変更されるためです。また、新しいファイルシステムが同じオペレーティングシステムでサポートされることは非常にまれです。
パーティションを隠すプログラムを書く
次に示すプログラムは、MBRのパーティションテーブルからそのパーティションのパーティションエントリを使用してパーティションを非表示にするために使用されます。拡張ボリューム内の他の論理区画を非表示にする場合は、拡張MBRにアクセスする必要があります。
プログラムのコーディングは次のとおりです。
/ * 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 */
/* ディスクの最初のセクターを読む */
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);
/* パーティションを非表示にするためのユーザー入力を取得する */
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;
}
コーディングに関するコメント:
プログラムは、MBRのパーティションテーブルにある4つのパーティションエントリすべてのファイルシステムインジケータバイトを読み取ります。関数showtype()は、ファイルシステムインジケーターバイトの対応する値のファイルシステムの名前を表示するために使用されます。
ユーザーは、画面に表示されるメニューから非表示にするパーティションを選択し、そのパーティションのファイルシステムインジケーターバイトの値に16(0x10)を追加して非表示にします。
関数showtype()のコーディングは次のとおりです。
/* ファイルシステムインジケータバイトの値に対応するファイルシステム名を表示する機能 */
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;
}
パーティションを再表示するプログラムを作成する
非表示のパーティションを再表示するプログラムは、プログラムを非表示にするプログラムとは正反対に機能します。このプログラムでは、隠しパーティションのファイルシステムインジケータバイトの値から16(0x10)を減算します。
プログラムのコーディングは次のとおりです。
/* 前のプログラムによって隠されたパーティションを再表示するプログラム */
#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);
/* Use入力を取得してパーティションを再表示します */
gotoxy(1,15);printf("Enter The partition no., Which to
unhide, Or Press any other key to
Exit... ");
tohide=getche();
switch(tohide)
{
/* パーティションテーブルの最初のパーティションを再表示します */
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;
}
プログラムへのコメント
再表示するパーティション番号を指定するときは注意してください。誤ってパーティション数を入力すると、そのパーティションのファイルシステム情報が変更され、パーティションにアクセスできなくなる場合があります。ただし、パーティションを非表示にするために前に説明したプログラムは、そのパーティションのファイルシステムインジケータバイトを修復するのに役立つ場合があります。
パーティションを削除するプログラムを書く
パーティションを削除するプログラムは、トラブルシューティングの目的で使用されます。たとえば、ディスクにFAT32ファイルシステムパーティションがあるとします。ここで、LINUXオペレーティングシステムをディスクに同時にインストールすることにしました。
いずれにせよ、MBRのパーティションテーブルに変更が加えられた段階で、オペレーティングシステムのインストールが途中で中断されます。このような場合、他のオペレーティングシステムをインストールしようとしていたパーティションにアクセスできなくなる可能性があります。
この場合、失われたパーティションのディスク領域は、アクセスできないために使用できなくなります。ただし、そのパーティションのパーティション情報をパーティションテーブルから削除すると、DOSのFDISKコマンドを使用してこのスペースを再び使用できるようになります。
MBRのパーティションテーブルからパーティションエントリを削除するプログラムを次に示します。
/* MBRのパーティションテーブルから2番目のパーティションエントリを削除するプログラム */
# 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();
}
プログラムへのコメント:
biosdiskのコメントを解除します ( 3, 0x80, 0, 0, 1, 1, &p ) MBRのパーティションテーブルから2番目のパーティションを削除する関数。
パーティションを削除するには、MBRのパーティションテーブルエントリで、パーティションのすべてのパラメータを0に設定します。拡張パーティションを削除すると、その拡張パーティションのすべての論理パーティションにもアクセスできなくなることを常に覚えておいてください。
関数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;
}
「Track0Bad」フロッピーのフォーマット
このプログラムは、トラック0に不良セクタがあるフロッピーをフォーマットするために使用されます。DOSまたはWindowsでフォーマットすると、「Track0BAD」などのエラーメッセージが表示されます。ただし、これを使用して通常のフロッピーをフォーマットすることもできます。
プログラムのコーディングは、この本に含まれているディスクに「TTFORMAT.C」という名前で記載されています。プログラムの動作ロジックは、2003年2月版のPCQUESTコンピュータマガジンで公開されたプログラムと同じです。
このプログラムでは、このタイプのフロッピーをフォーマットして再利用できるようにします。プログラムは、不良セクタがいくつかある場合でもフロッピーディスクを処理できるように聞こえます。ただし、ディスクの最初のセクターが不良の場合、フロッピーをフォーマットすることはできません。
プログラムは、すべてのDBR、FAT、およびルートディレクトリ情報を書き換えます。ディスクの表面に不良セクタがある場合、FATで不良としてマークされます。
プログラムのコーディングでは、構造体BPBを使用してDBRのBIOSパラメータブロックを書き込みます。構造体boot_sectorは、ディスクのDBRを書き込むために使用されます。構造address_fieldは、トラックごとのシリンダー、ヘッド、セクターの数、およびセクターのサイズを操作するために使用されます。
プログラムのコーディングで使用されるさまざまな関数とその説明は、次の表に示されています。
フロッピーディスクのボリュームシリアル番号は、システムクロックの現在の日付と時刻に従ってDOSによって計算されます。
シリアル番号の最初の部分は、時間(秒と100分の1秒)と日付(月と日)の合計によって計算されます。シリアル番号の2番目の部分は、時間(時と分)と日付(年)の合計に等しくなります。
すべての計算は16進法で実行されます。たとえば、2003年10月23日の11:16:28:65にDOS環境でフロッピーをフォーマットしたと仮定します。次に、ディスクのシリアル番号を計算しましょう。
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
ここで、前述の説明に従って、フロッピーディスクのシリアル番号を計算してみましょう。シリアル番号の最初の部分は(1C41 + 0A17)= 2658であり、シリアル番号の2番目の部分は(0B10 + 07D3)= 12E3になります。
ディスク編集ツールの作成
ディスク編集プログラムのコーディングは、この本に含まれているディスクに「TTEDITOR.C」というファイル名で記載されています。このプログラムを使用して、ハードディスクまたはフロッピーディスクの表面を分析できます。この本を書いている間のほとんどの研究でさえ、私はTTEDITORを使用してディスク表面を分析したり、ディスクの変更を実行したりしました。
この編集プログラムが実行できる重要なタスクのいくつかは次のとおりです。
- ハードディスクとフロッピーディスクの表面のセクターごとの情報を読み取ります。
- 任意のセクターのバックアップをファイルに書き込みます。
- ファイルからセクターのデータを復元します。
- 1バイトを変更します。
- 16進数から10進数および2進数の計算機。
プログラムは、biosdisk()および_bios_disk()関数を使用してディスクにアクセスします。 8.4 GBを超えるディスクを分析する場合は、INT13Hの拡張機能を使用してプログラムを変更します。プログラムで使用される関数の説明は、次の表に示されています。
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. |