?? fat32mountpartition.c
字號:
#ifndef _FAT32_DEFINE
#include "FAT32.c"
#endif
BYTE FAT32MountPartition(void);
BYTE FAT32MountPartition(void)
{
register BYTE i,j,k;
xdata DWORD temp[4]={0,0,0,0};
IDEReadSector(0); //讀MBR扇區
//檢查MBR扇區標記
if (DiskBuffer[510] != 0x55||DiskBuffer[511] != 0xaa)
return(FAT32_ERR_MBR_FLAG); //不正常的引導扇區標志
//加載分區表
j=0;k=0;
for(i=0;i<4;i++)
{
DPT[i].LBABegin=MEMSwap32(DPT[i].LBABegin);
DPT[i].CntSec=MEMSwap32(DPT[i].CntSec);
if (DPT[i].TypeCode==0x0b) //FAT32 分區
{
sDPT[j].TypeCode = DPT[i].TypeCode;
sDPT[j].LBABegin = DPT[i].LBABegin;
sDPT[j].CntSec = DPT[i].CntSec;
j++;
}
else if (DPT[i].TypeCode==0x05||DPT[i].TypeCode==0x0f) //擴展分區
{
temp[k]=DPT[i].LBABegin;
k++;
}
}
for(i=0;i<k&&j<16;i++)
{
IDEReadSector(temp[i]);
DPT[i].LBABegin=MEMSwap32(DPT[i].LBABegin);
DPT[i].CntSec=MEMSwap32(DPT[i].CntSec);
if (DPT[i].TypeCode==0x0b) //FAT32 分區
{
sDPT[j].TypeCode = DPT[i].TypeCode;
sDPT[j].LBABegin = temp[i] + DPT[i].LBABegin;
sDPT[j].CntSec = DPT[i].CntSec;
j++;
}
}
HDD.TotalPartitions=j;
#ifdef DEBUG
printf("Partition Table\n");
printf("PNo.\tType\tLBAStart\tCount\tSize\n");
for(i=0;i<HDD.TotalPartitions;i++)
{
printf("P%bd\t%bx\t%ld\t\t%ld\t%ldMB\n",i,sDPT[i].TypeCode,sDPT[i].LBABegin,sDPT[i].CntSec,sDPT[i].CntSec*512/1024/1024);
}
#endif
return(0);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -