仕切りを削除する執筆プログラム
仕切りを削除するプログラムはトラブルシューテ-ィングの為に使用される。 例えばあなたのディスクでFAT32ファイルシステムの仕切りがあったと、仮定しなさい。 今あなたのディスクにLINUXのオペレーティングシステムを同時に取付けることにした。
、オペレーティングシステムの取付けがいかに中間中断するかMBRの仕切りのテーブルへの修正がなされていた場合の、段階で。 そのような場合あなたが他のオペレーティングシステムを取付けようとしていた仕切りが得難くなるという多くの可能性がある。
この場合無くなった仕切りのディスク空間は得難いのために無用になる。 、私達が再度このスペースをdosのFDISK命令を使用して使用可能にいかにさせてもいいか但し私達が仕切りのテーブルからその仕切りの仕切り情報を削除すれば。
MBRの仕切りのテーブルから仕切りの記入項目を削除するプログラムは次に与えられてしまった:
/*MBRの仕切りのテーブルから第2仕切りの記入項目を削除するプログラム */
# include <bios.h>
/* 仕切りのテーブルからの仕切りの記入項目を読む構造 */
struct partition
{
/* 活動区画バイト */
unsigned char bootable ;
/* 頭部の開始 */
unsigned char start_side ;
/* セクターおよびシリンダー数の開始の組合せ */
unsigned int start_sec_cyl ;
/* ファイルシステムの表示器バイト */
unsigned char parttype ;
/* 終りの頭部 */
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] ;
/* 仕切りのテーブル */
struct partition pt[4] ;
/* マジックナンバー */
int lasttwo ;
} ;
struct part p ;
void main()
{
unsigned int t1,t2;
clrscr();
biosdisk ( 2, 0x80, 0, 0, 1, 1, &p ) ;
display(); /* 仕切りのテーブルの情報を表示しなさい */
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: ");
/*MBRの仕切りのテーブルから第2仕切り情報を削除するためにはから前方スラッシュを取除きなさい biosdisk ()機能。 、仕切りのテーブルの第2仕切りの仕切り情報完全に消される不注意に使用してはいけない。 */
////// biosdisk (3、0x80、0、0、1、1の&p); 表示(); /*の表示修正の後の仕切りのテーブルの情報 */
getch();
}
プログラムのコメント:
Uncomment MBRの仕切りのテーブルから第2仕切りを削除するbiosdisk (3、0x80、0、0、1、1の&p)機能。
仕切りを、それのすべての変数はMBRの仕切りのテーブルの記入項目の0に削除するためには、置かれる。 延長仕切りを削除したらそれを、その延長仕切りのすべての論理的な仕切りまたなる得難く常に覚えなさい。
機能表示が() 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 |
|
|
|