すべての論理的な仕切りおよび情報を見つけるプログラム
私達が先に論議したプログラムはMBRの仕切りのテーブルからの仕切り情報を読むことだった。 しかしちょうどMBRを読むことによってだけ、私達はディスクの延長仕切りにある他の論理的な仕切りの情報を手に入れることができない。
私達は既にマスタブートレコードにマスターの仕切りのテーブルで4つの記入項目の限界があること論議してしまった。 延長マスタブートレコードの位置がフォーマットが主要な仕切りのテーブル現在に丁度同じである、延長仕切りのテーブルを含んでいるマスタブートレコードの助けによって得ることができるどんなに。
すべての延長仕切りは延長仕切りの記入項目によって確保されるスペースの内にあるべきである。 存在していれば延長仕切りの2つだけは正常な仕切りとして、第1および別の延長仕切りとして第2使用されるために意味される。
従って1つのマスターの仕切りのテーブルの助けによって私達はそれの隣で現在なら別の延長マスターの仕切りのテーブルの位置を得てもいい。
次のプログラムはすべての論理的な仕切りおよび仕切りの記入項目情報を見つけるのためであり、ディスクからのMBRそして延長MBRsを読む。 プログラムのコーディングは次の通りある:
/*すべての論理的な仕切りの変数を読むプログラムはディスクで示す*/
#include<dos.h>
char buffer[512], report_par[20];
unsigned drive_num =0x80;
unsigned long star_sec[20], sec;
/* ディスク住所包みのフォーマットの構造は、readabsolutesectorsによって使用されるために作用する*/
struct diskaddrpacket
{
char packetsize ; /* 包み、概要に10Hのサイズ */
char reserved ; /*予約(0)*/
int blockcount ; /* 移るべきブロックの数 */
char far *bufferaddress ; /* 緩衝を移す住所*/
unsigned long blocknumber[2] ; /* 絶対ブロック番号の開始 */
} ;
void main()
{
int no_par,i;
clrscr();
no_par = 0;
All_partition_information(star_sec,&no_par,&sec,buffer,
report_par);
printf(" \n\n ディスクの総仕切り= %d\n ",
no_par);
for(i=0;i<no_par;i++)
{
printf("\n 仕切りのセクター数の開始 %d =
%lu " , i+1, star_sec[i]);
}
printf("\n");
getch();
}
|