📄 fat.h
字号:
#ifndef _FAT_H_
#define _FAT_H_
typedef struct {
uint8 BS_jmpBoot[3]; //跳到引导代码的指令.可为EBxx90和E9xxxx两种,xx表示任意允许的8bit值的字节
uint8 BS_OEMName[8]; //OEM名字字符串,通常为“MSWIN4.1”
uint16 BPB_BytesPerSec; //每扇区字节数,该值可为512,1024,2048或4096
uint8 BPB_SecPerClus; //每簇的扇区数,值为2的n次方,范围1~128
uint16 BPB_RsvdSecCnt; //在开始处保留区域的保留扇区数.该值不能为0,对于FAT32,其值为32
uint8 BPB_NumFATs; //卷中FAT数据结构的个数,对任何类型的FAT卷,其值永远为2个
uint16 BPB_RootEntCnt; //对于FAT12/FAT16卷,在根目录的32字节的目录个数,对FAT32,永远设定为0
uint16 BPB_TotSec16; //卷中的扇区的数量(用16bit表示),如果为0,则BPB_TotSec32必须为非零.对于FAT32,必须为0
uint8 BPB_Media; //介质标志字: 0xF8表示不可移动介质,0xF0表示可移动介质
uint16 BPB_FATSz16; //对于FAT12/FAT16,表示第一个FAT占用的扇区数,对于FAT32卷必须为0
uint16 BPB_SecPerTrk; //对于中断13,每磁道的扇区数
uint16 BPB_NumHeads; //对于中断13,磁头的数量
uint32 BPB_HiddSec; //包含FAT卷的分区的隐含扇区的数量
uint32 BPB_TotSec32; //卷中扇区的数量,用4Byte表示
uint8 BS_DrvNum; // 中断13的驱动器号
uint8 BS_Reservedl; //用于NT系统(保留),对于FAT卷,永远为0
uint8 BS_BootSig; //扩展引导的标志
uint32 BS_VolID; //卷序列号
uint8 BS_VolLab[11]; //卷标,用11个字节记录在根目录下
uint8 BS_FilSysType[8]; //文件系统标签,其值为: “FAT12 ” , “FAT16 ” 或 “FAT ”
uint8 ExecutableCode[448]; //可执行代码
uint8 ExecutableMarker[2]; //可执行代码标志(0x55 0xAA)
} FAT_BPB;
#define ATTR_READ_ONLY 0x01
#define ATTR_HIDDEN 0x02
#define ATTR_SYSTEM 0x04
#define ATTR_VOLUME_ID 0x08
#define ATTR_DIRECTORY 0x10
#define ATTR_ARCHIVE 0x20
#define ATTR_LONG_NAME ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID
typedef struct {
uint8 FileName[11]; //文件名
uint8 FileAttrib; //定义文件属性
uint8 UnUsed[10]; //Windows NT 保留
uint8 FileUpdateTime[2]; //文件的最近修改时间
uint8 FileUpdateData[2]; //文件的最近修改日期
uint16 Start; //文件的起始簇簇号
uint32 Size; //文件的长度
} DIR;
typedef struct {
uint8 BPB_SecPerClus; //每簇的扇区数,值为2的n次方,范围1~128
uint16 BPB_RsvdSecCnt; //在开始处保留区域的保留扇区数.该值不能为0.对于FAT32,其值为32
uint8 BPB_NumFATs; //卷中FAT数据结构的个数,对任何类型的FAT卷,其值永远为2个
uint16 BPB_RootEntCnt; //对于FAT12/FAT16卷,在根目录的32字节的目录个数,对FAT32,永远设定为0
uint16 BPB_TotSec16; //卷中的扇区的数量(用16bit表示),如果为0,则BPB_TotSec32必须为非零,对于FAT32,必须为0
uint16 BPB_FATSz16; //对于FAT12/FAT16,表示第一个FAT占用的扇区数,对于FAT32卷必须为0
uint32 BPB_HiddSec; //包含FAT卷的分区的隐含扇区的数量
uint32 DirStartSec; //目录区的起始扇区
uint32 DataStartSec;
uint16 DirSecCount; //目录区占用的扇区数
} FileSystemInfo;
typedef struct {
uint16 m;
uint32 i;
uint16 ClusID;
uint32 LBA;
} FATFileIndex;
extern void FAT_Init(void);
extern uint32 FAT_FileOpen(uint8 Name[11], uint32 Start);
extern uint16 FAT_FileRead(uint32 Length, void* Data);
extern void FAT_FileWrite(uint32 Length, void* Data);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -