2016-11-20 13 views
1

C에서 디스크 이미지의 볼륨 레이블을 얻으려고 시도하는 데 이상한 시간이 있습니다. FAT12 디스크의 경우이 정보가 오프셋 0x2b 또는 43에 있다는 것을 알고 있습니다. 10 진수이며 11 바이트 길이입니다. 어쨌든 여기 지금 내 코드입니다 : 내가 사용하는 입력 파일의 경우C에서 Fat12 디스크의 볼륨 레이블 얻기

void main(int argc, char *argv[]) { 
    ... 
    FILE *fp = fopen(argv[1], "rb"); 
    printf("Volume Label: %s\n", seekData(fp, 43, 11)); 
    ... 
} 

unsigned char* seekData(FILE *fp, int offset, int bytes) { 
    unsigned char* buff = malloc(sizeof(unsigned char)*bytes); 
    fseek(fp, offset, SEEK_SET); 
    fread(buff, 1, bytes, fp); 
    rewind(fp); 
    return buff; 
} 

이 (.IMA는) 내가 다시 20 20 20 20 20 20 20 20 20 20 20 진수에서 점점 계속. 위 코드를 실행하면 Volume Label:(nothing here)이됩니다. 나는 여기에 명백한 무엇인가 분명한 것을 놓치고 있냐? 어떤 도움을 주시면 감사하겠습니다.

+3

이 장치는 하드 드라이브와 같은 파티션 장치입니까? 이 경우 부트 섹터는 MBR 뒤에옵니다. FAT12 파티션이 시작되는 위치를 파악하려면 MBR을 읽어야 할 수도 있습니다. 또한 디스크에 레이블이 있는지 확인하십시오. – Schwern

+0

품질에 대해 전혀 알지 못하지만 도움이 될 수 있습니다. http://www.dailyfreecode.com/code/file-allocation-table-2866.aspx – Schwern

+1

C 코드로 시작하는 대신 16 진 편집기로 시작하십시오. 볼륨 레이블이 실제로 어디에 있는지 파악한 다음 거기에서부터 이동하십시오. –

답변

0

그래서 문제를 발견했습니다. 볼륨 레이블은 이전에 언급 한 위치에 더 이상 저장되지 않으며 보통 루트 디렉토리에 특수 파일로 위치합니다.

소스

: http://www.ntfs.com/fat-partition-sector.htm

. "볼륨 레이블이 필드는 볼륨 레이블을 저장하는 데 사용했지만 볼륨 레이블을 이제 루트 디렉토리에 특수 파일로 저장됩니다."