프로그램하는 C에 있는 INT 13H 연장을 사용하는 방법, 우리는 우리가 더 이른 장에서 사용하고 있던 동일한 C 기능 (int86 (), int86x () 등등)를 가진 INT 13H의 연장 기능을 불러서 좋다. 뒤에 오는 보기는 3개의 기능에 초점을 준다 (존재하는 체크 연장, 장시간 읽어서 및 늘여 쓴다)

Files Recovery Software
연락처 세부 정보 고객 지원 다운로드 데모 제품  

 
 

C 프로그램에 있는 INT 13H 연장을 사용하는 방법

우리는 우리가 더 이른 장에서 사용하고 있던 동일한 C 기능 (int86 (), int86x () 등등)를 가진 INT 13H의 연장 기능을 불러서 좋다. 저희가 보기에 의하여 그것을 배우게 하십시오.

뒤에 오는 보기는 3개의 기능에 초점을 준다 (존재하는 체크 연장, 장시간 읽어서 및 늘여 쓴다). 그러나 우리는 이 장에 확장된 사용에 쓴다 기능을 가고 있지 않다.

프로그램은 첫째로 연장이 지원되거나 아닙니다 연장이 INT 13H를 위해 지 경우에 출석하면, 그것 읽는다 디스크의 절대 분야 0 (따라서 MBR)를 검사한다. 프로그램의 코딩은 뒤에 오는 방법에서 진행한다:

/* INT 13 BIOS 연장을 사용하는 8.46 GB 저쪽에 분야에 접근하는 프로그램 */

#include<stdio.h>
#include<dos.h>

/* 자료 유형에 인식기를 할당한다 */
typedef unsigned char Byte;
typedef unsigned int Word;
typedef unsigned long DWord;

/* disk_packet 구조는 DS에서 적재된다: 수행되는 SI와 명령 */

struct disk_packet
{
Byte size_pack; // Size of packet must be 16 or 16+
Byte reserved1; // Reserved
Byte no_of_blocks;// Number of blocks for transfer
Byte reserved2; // Reserved

/* Address in Segment:Offset format */
Word offset; //offset address
Word segment; //segment address

/* 1152921504.607 GB의 수용량의 조차 디스크를 지원하기 위하여 */

DWord lba1;
DWord lba2;
}disk_pack;

/* 연장이 지원되는지 검사하는 기능 */

void check_ext_present()
{
union REGS inregs, outregs; /* Input Registers and
Output */
inregs.h.ah=0x41; /* Function to Check
Extension Present */
inregs.x.bx=0x55AA;
inregs.h.dl=0x80; /* Drive No for first Hard Disk */

int86(0x13,&inregs,&outregs); /*Call interrupt */

if(outregs.x.cflag)
{
/* Extension Not Supported */
printf("\nBios extension not supported");
exit(1);
}

if(outregs.x.bx==0xAA55)
if(outregs.x.cx & 0x1)

/* Extension Present */
printf("\nExtended I/O supported");
}

/* 분야를 읽는 기능 */

void read_sectors(void *buffer)
{
union REGS inregs, outregs; /* Input and Output
Registers */
struct SREGS segregs; // Segment Registers
disk_pack.size_pack=16; // Set size to 16
disk_pack.no_of_blocks=1; // One block
disk_pack.reserved1=0; // Reserved Word
disk_pack.reserved2=0; // Reserved Word
disk_pack.segment=FP_SEG(buffer);// Segment of buffer
disk_pack.offset=FP_OFF(buffer); // Offset of buffer

/* 하드 디스크의 MBR를 위한 요구 1 */
/* Read Absolute sector 0 */

disk_pack.lba1=0; /* LBA address, Contains first
32 bits */

/* We normally require( drives < 2.1 T.B) to set
only this */

disk_pack.lba2=0; // Last 32 bit address
inregs.h.ah=0x42; // Function to read
inregs.h.dl=0x80; // Drive Number for First Hard Disk inregs.x.si = FP_OFF(&disk_pack); /*Make DS:SI point
to disk_pack */
segregs.ds = FP_SEG(&disk_pack);

/* Call Interrupt */
int86x(0x13,&inregs,&outregs,&segregs);

if(outregs.x.cflag)
printf("\n\nError %d\n",outregs.h.ah);
else
printf("\n\nI hope Everything is all Right");
}

//// Write Sector Function \\\\

void write_sector()
{

/*이 기능에 있는 0x43일 기능 수 를 제외하고 read_sectors가 작용한다 과 같은 방식으로 써질 것이다. 우리는 다음 장에 장시간을 쓴다 기능을 토론할 것이다.

전에 이 기능을 사용하여 검사하고 하기 위하여 가 당신은 인 무슨 확인하십시오. 당신은 있어야 당신이 려고 하고 있는 무슨을의 적당한 지식이 하기 위하여 한다. 지식의 부족에 있는 이 기능의 사용은 또는 부주의하게 당신의 자료를 파괴할지도 모른다. */

}

/// Main Function \\\\
void main()
{
int i=0;

/* buffer to hold MBR */
Byte mbr[512];
clrscr();

/* BIOS 연장 현재를 위한 검사 */
check_ext_present();

/* read sector */
read_sectors(&mbr);

printf("\n\n Data of MBR \n");
printf("▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n\n\n");
while(i++<512)
{
/* display the MBR buffer */
printf("%c",mbr[i]);
}
}

 

프로그램의 코딩에 대하여 코멘트

typedef는 자료 유형에 인식기에게 그런을 typedef 서명 없는 숯 바이트 할당한다; 자료 유형 숯을 위해 인식기 바이트를 할당한다. 유사하게 인식기 낱말은 int에 할당되고 DWord는 오랫동안 할당된다.

disk_packet 구조는 DS에서 적재된다: SI와 명령은 (장시간 읽는과 같이 늘이는 등등을 쓰거나 확인하십시오) 수행된다. 전에 주어진 IBM/MS INT 13H 연장 (작용할 것이다 기능 41H 49H)의 기능을 보십시오.

check_ext_present () 기능은 연장이 유효한 지원하는 또는 아닙니다 인지 검사한다. 기능은 BX=55AAH (inregs.x.bx=0x55AA;)로 불린다 그리고 연장이 지원되는 경우에 BX 기록기는 AA55H에 놓인다. (전에 주어진 기능 41H를 보십시오)

기능 read_sectors는 disk_pack.lba1에 의해 지정된 디스크의 절대 분야를 읽는 이용된다. 이 프로그램에서는 우리는 disk_pack.lba1=0를 주었다, 따라서 우리는 디스크의 MBR를 읽기 위하여 이렇게 가는 절대 분야 0를 (주를 아래에 보십시오) 읽기 위하여 려고 하고 있다.

write_sector 기능은 또한 같은 read_sectors에 의하여 같은 방식으로 작용하고로 써질 동일 그러나 다른 기능 선택권이다. 우리는 다음 장에서 그것을 사용할 것이다.

Note:

우리는 뒤에 오는 2가지의 방법에 있는 디스크 분야를 읽었다:

  1. Relative Sector Read (or Write)
  2. Absolute Sector Read (or Write)

읽힌 관계되는 분야로 우리는 디스크의 CHS (실린더, 맨 위와 분야) 기하학에 따라 디스크 분야를 읽었다. 디스크 (디스크의 첫번째 분야)의 MBR이라고 읽힌 관계되는 분야에서는 실린더 0, 머리 0 및 분야 1에 있다.

디스크 분야의 절대 독서에서는, 우리는 우리의 프로그램에 있는 실린더 또는 맨 위 수를 지정할 필요가 없는다. 절대 분야는 절대 분야 0에서 세어진다.

따라서 우리가 디스크 (디스크의 첫번째 분야)의 MBR를 읽기 위하여 려고 하는 경우에, 우리는 절대 분야 0를 읽기 위하여 려고 하고 있다. 그것의 대응 실린더의, 맨 위 및 분야 수로 절대 분야 수를 개조하는 BIOS의 일 이다.

관계되는 분야 독서 (또는 쓰기의 경우에는), 우리가 CHS 절대 분야 독서 또는 쓰기 산출을 위한 그러므로 3개의 루프를 이번에 달릴 필요가 있더라도 반면 절대 분야 독서 (또는 쓰기에서 것과 같이), 우리는 전체 디스크 독서와 같은 가동에 있는 루프 내의서만 절대 분야를 산출해야 한다 또는 쓰기는 관계되는 분야 독서 또는 쓰기 보다는 매우 더 빠르다.

63의 분야, 다음 주어지는 테이블, 쇼 절차 및 두 독서 방법 및 이렇게 쇼 전부의 다름을 가진 예를 들면 우리는 16명의 머리 절대 분야 접근이 뛰기에 프로그램을 (프로그램 등등을 닦는 전체 디스크 독서 쓰기 또는 전체 디스크와 같은) 매우 빨리 가지고 가는 우리의 시간을 만들지도 모르다 방법 (측)와 가진 아무 하드 디스크나 있는 경우에, 12의 실린더 및:

관계되는 분야 읽기

절대 분야 독서

Cylinder =0, Head =0, Sector = 1

        Absolute Sector = 0

Cylinder =0, Head =0, Sector = 2

        Absolute Sector = 1

Cylinder =0, Head =0, Sector = 3

        Absolute Sector = 2

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =0, Head =0, Sector = 62

        Absolute Sector = 61

Cylinder =0, Head =0, Sector = 63

        Absolute Sector = 62

Cylinder =0, Head =1, Sector = 1

        Absolute Sector = 63

Cylinder =0, Head =1, Sector = 2

        Absolute Sector = 64

Cylinder =0, Head =1, Sector = 3

        Absolute Sector = 65

Cylinder =0, Head =1, Sector = 4

        Absolute Sector = 66

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =0, Head =1, Sector = 63

        Absolute Sector = 125

Cylinder =0, Head =2, Sector = 1

        Absolute Sector = 126

Cylinder =0, Head =2, Sector = 2

        Absolute Sector = 127

Cylinder =0, Head =2, Sector = 3

        Absolute Sector = 128

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =0, Head =15, Sector = 63

        Absolute Sector = 1007

Cylinder =1, Head =0, Sector = 1

        Absolute Sector = 1008

Cylinder =1, Head =0, Sector = 2

        Absolute Sector = 1009

Cylinder =1, Head =0, Sector = 3

        Absolute Sector = 1010

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =1, Head =0, Sector = 63

        Absolute Sector = 1070

Cylinder =1, Head =1, Sector = 1

        Absolute Sector = 1071

Cylinder =1, Head =1, Sector = 2

        Absolute Sector = 1072

Cylinder =1, Head =1, Sector = 3

        Absolute Sector = 1073

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =1, Head =15, Sector = 63

        Absolute Sector = 2015

Cylinder =2, Head =0, Sector = 1

        Absolute Sector = 2016

Cylinder =2, Head =0, Sector = 2

        Absolute Sector = 2017

Cylinder =2, Head =0, Sector = 3

        Absolute Sector = 2018

                  .
                  .
                  .
                  . 

                  .
                  .
                  .
                  . 

Cylinder =11, Head =15, Sector = 60

        Absolute Sector = 12092

Cylinder =11, Head =15, Sector = 61

        Absolute Sector = 12093

Cylinder =11, Head =15, Sector = 62

        Absolute Sector = 12094

Cylinder =11, Head =15, Sector = 63

        Absolute Sector = 12095

 

공구를 분석하는 어떤 디스크든지 MBR에 의해 표시되는, MBR의 분할 테이블의 정보는 아래와 같이 제공되었다:

위 정보에서는, 분할에서 자유롭 분야의 수에 따르면 세어지는 두 분할 전부의 시작을 위한 관계되는 분야 수는 63 그리고 각각 11277630, 디스크에서 유효한이다.


Previous page

page 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18

19 | 20

 

 

Chapter 10


page 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18


page 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33

Next page

 
 
데이터 복구 도서
 
장-1 자료 회복의 개관
장-2 하드 디스크의 소개
장-3 디스크와 OS에 논리적인 접근
장-4 수 체계
장-5 C 프로그램의 소개
장-6 컴퓨터 기초에 소개
장-7 필요한 DOS는 명령한다
장-8 디스크 BIOS는 작용하고 C로 취급을 중단한다
장-9 큰 하드 디스크 취급
장-10 타락된 플로피에서 자료 회복
장-11 백업을 만들기
장-12 프로그램을 가진 읽고는 및 변경 MBR
장-13 프로그램을 가진 읽고는 및 변경 DBR
장-14 "익지않는 파일" 회복을 위해 프로그램
장-15 자료 와이퍼를 위해 프로그램
장-16 디스크를 위한 공용품 더 개발
부록 자료 회복 기간의 용어집
 
 
Pro Data Doctor

제품

연락처 세부 정보

고객 지원

다운로드 데모

이용 약관

 
Pro Data Doctor