1

我在尝试获取 C 中磁盘映像的卷标时遇到了奇怪的问题。我知道对于 FAT12 磁盘,这条信息位于偏移量 0x2b 或十进制的 43 处,长度为 11 个字节。无论如何,这是我现在的代码:

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)在上面的代码运行时。我在这里错过了一些非常明显的东西吗?任何帮助,将不胜感激

4

1 回答 1

1

所以我发现了问题所在。似乎卷标不再存储在前面提到的位置,并且通常作为特殊文件位于根目录中。

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

“卷标。该字段用于存储卷标,但卷标现在作为特殊文件存储在根目录中。”

于 2016-11-21T00:27:27.200 回答