?? fatmountvolumeid.c
字號:
#ifndef _FAT_DEFINE
#include "FAT.c"
#endif
BYTE FATMountVolumeID(BYTE Partition);
BYTE FATMountVolumeID(BYTE Partition)
{
pdata DWORD TotSec,DataSec,CountofCluster;
if (Partition>=StorageMedia.TotalPartitions) return(FAT_ERR_PARTITION_NOT_FOUND); //沒找到指定扇區
StorageMedia.ReadSector(sDPT[Partition].LBABegin,DiskBuffer); //讀FAT VolumeID扇區
//檢查VolumeID扇區標記
if (DiskBuffer[510] != 0x55||DiskBuffer[511] != 0xaa)
return(FAT_ERR_MBR_FLAG); //不正常的引導扇區標志
//檢查分區類型
StorageMedia.CurrentPartition = Partition; //當前分區號
BOOTSEC->BPB_RsvdSecCnt=MEMSwap16(BOOTSEC->BPB_RsvdSecCnt);
BOOTSEC->BPB_RootEntCnt=MEMSwap16(BOOTSEC->BPB_RootEntCnt);
BOOTSEC->FAT.F32.BPB_RootClus=MEMSwap32(BOOTSEC->FAT.F32.BPB_RootClus);
BOOTSEC->FAT.F32.BPB_FSInfo=MEMSwap16(BOOTSEC->FAT.F32.BPB_FSInfo);
BOOTSEC->BPB_TotSec16=MEMSwap16(BOOTSEC->BPB_TotSec16);
BOOTSEC->BPB_FATSz16=MEMSwap16(BOOTSEC->BPB_FATSz16);
BOOTSEC->BPB_TotSec32=MEMSwap32(BOOTSEC->BPB_TotSec32);
BOOTSEC->FAT.F32.BPB_FATSz32=MEMSwap32(BOOTSEC->FAT.F32.BPB_FATSz32);
FAT.RootSectors = (BOOTSEC->BPB_RootEntCnt * 32) / 512;
if (BOOTSEC->BPB_FATSz16!=0)
FAT.FATSz = BOOTSEC->BPB_FATSz16;
else
FAT.FATSz = BOOTSEC->FAT.F32.BPB_FATSz32;
if (BOOTSEC->BPB_TotSec16!=0)
TotSec = BOOTSEC->BPB_TotSec16;
else
TotSec = BOOTSEC->BPB_TotSec32;
DataSec = TotSec - (BOOTSEC->BPB_RsvdSecCnt + (BOOTSEC->BPB_NumFATs * FAT.FATSz) + FAT.RootSectors);
CountofCluster = DataSec / (DWORD)(BOOTSEC->BPB_SecPerClus);
if (CountofCluster<4085)
{
sDPT[Partition].FATType=FAT_TYPE_FAT12;
FAT.RootClus = BOOTSEC->BPB_RsvdSecCnt + (BOOTSEC->BPB_NumFATs * BOOTSEC->BPB_FATSz16);
}
else if (CountofCluster<65525)
{
sDPT[Partition].FATType=FAT_TYPE_FAT16;
FAT.RootClus = sDPT[StorageMedia.CurrentPartition].LBABegin + BOOTSEC->BPB_RsvdSecCnt + (BOOTSEC->BPB_NumFATs * BOOTSEC->BPB_FATSz16);
}
else
{
sDPT[Partition].FATType=FAT_TYPE_FAT32;
FAT.RootClus = BOOTSEC->FAT.F32.BPB_RootClus; //根目錄簇號
}
FAT.SecPerClus = BOOTSEC->BPB_SecPerClus; //每簇扇區數
FAT.CurrentDirectory = FAT.RootClus; //當前目錄入口(簇號)
FAT.FATSec = sDPT[StorageMedia.CurrentPartition].LBABegin + BOOTSEC->BPB_RsvdSecCnt; //FAT表開始的扇區號
FAT.ClusSec = sDPT[StorageMedia.CurrentPartition].LBABegin + BOOTSEC->BPB_RsvdSecCnt + (BOOTSEC->BPB_NumFATs * FAT.FATSz) + FAT.RootSectors; //簇開始的扇區
FAT.FSISec = BOOTSEC->FAT.F32.BPB_FSInfo + sDPT[Partition].LBABegin; //FAT32擴展信息扇區號
//加載第一個FAT表
StorageMedia.ReadSector(FAT.FATSec,FATTable.FAT.F12);
FATTable.Sector=0;
return(0);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -