2016-11-20 81 views
1

我有一個奇怪的時間試圖獲得磁盤映像的卷標。我瞭解,對於FAT12磁盤,這條信息位於偏移量0x2b或43以十進制表示,長度爲11個字節。反正這裏是我的代碼現在:獲取Fat12磁盤的卷標C

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之後。您可能必須閱讀MBR以確定FAT12分區的起始位置。另外,你確定磁盤有標籤嗎? – Schwern

+0

我不知道它的質量,但這可能有幫助。 http://www.dailyfreecode.com/code/file-allocation-table-2866.aspx – Schwern

+1

而不是從C代碼開始,從一個十六進制編輯器開始。找出卷標*真正*的位置,然後從那裏開始。 –

回答

0

所以我發現了這個問題。似乎卷標不再存儲在先前提到的位置,通常位於根目錄中作爲特殊文件。

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

「卷標使用此字段存儲卷標,但卷標現在存儲在根目錄下的特殊文件。」