www.pudn.com > fat32.c51.rar > FATFINDPARTITIONS.C


#ifndef _FAT32_DEFINE 
 #include "FAT32.c" 
#endif 
 
BYTE FAT32FindPartitions(void); 
 
BYTE FAT32FindPartitions(void) 
{ 
	pdata BYTE i,j=0; 
	pdata DWORD MasterExtLBA,ExtLBA; 
	bit Master=1,Ext=1; 
 
	MasterExtLBA=0x00000000; 
	ExtLBA=0x00000000; 
 
	while(Ext) 
	{ 
		if (StorageMedia.ReadSector(ExtLBA,DiskBuffer)) {printf("I/O error");return(0);}				//读MBR扇区 
//		IDEReadSector(ExtLBA,DiskBuffer); 
		Ext=0; 
		//检查MBR扇区标记 
	 	if (DiskBuffer[510] != 0x55||DiskBuffer[511] != 0xaa) 
			{printf("55AA\n");	return(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==0x01|| 
				DPT[i].TypeCode==0x04|| 
				DPT[i].TypeCode==0x06|| 
				DPT[i].TypeCode==0x0b|| 
				DPT[i].TypeCode==0x0c|| 
				DPT[i].TypeCode==0x0e)			//FAT 分区 
			{ 
				sDPT[j].TypeCode = DPT[i].TypeCode; 
				sDPT[j].LBABegin = DPT[i].LBABegin + ExtLBA; 
				sDPT[j].CntSec = DPT[i].CntSec; 
				j++; 
			} 
			else if (DPT[i].TypeCode==0x05||DPT[i].TypeCode==0x0f)		//扩展分区 
			{ 
				Ext=1; 
				if (Master) 
				{ 
					ExtLBA=DPT[i].LBABegin; 
					MasterExtLBA=DPT[i].LBABegin; 
					Master=~Master; 
				} 
				else 
				{ 
					ExtLBA=MasterExtLBA+DPT[i].LBABegin; 
				} 
			} 
		} 
	} 
	return(j); 
}