모든 논리적인 분할 및 그들의 정보를 찾아내는 프로그램
우리가 먼저 토론한 프로그램은 MBR의 분할 테이블에서 분할 정보를 읽기 위한 것이었다. 그러나 다만 MBR를 읽어서 서만, 우리는 디스크의 장시간 분할에 있는 다른 논리적인 분할의 정보를 입수할 수 없다.
우리는 이미 주된 부트 기록에는 주된 분할 테이블에 있는 4개의 입장의 한계가 다는 것을 토론했다. 장시간 주된 부트 기록의 위치가 그의 체재가 주요 분할 테이블 현재로 정확하게 동일하, 장시간 분할 테이블을 포함하는 주된 부트 기록 덕분에 얻어질 수 있다 그러나.
모든 장시간 분할은 장시간 분할 입장에 의해 비축된 공간 안에 존재해야 한다. 장시간 분할의 단지 2개는 존재하는 경우에 정상적인 분할로, 첫번째 및 다른 장시간 분할로 제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();
}
|