⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 struct.h

📁 fat file system api in VC
💻 H
字号:

typedef struct
{
	INT		CylinderNum;
	INT		HeadNum;
	INT		SectorNum;
}CHS;

/*定义分区表项的结构*/
typedef struct
{
    BYTE         BootFlag;             /*启动标志*/
    CHS         StartCHS;              /*分区开始的柱面、磁头、扇区*/
    BYTE         SystemID;             /*分区类型*/
    CHS         EndCHS;                /*分区结束的柱面、磁头、扇区*/
    DWORD         RelativeSectors;     /*分区相对扇区数,指分区相对于记录该分区的分区表的扇区位置之差*/
    DWORD         TotalSectors;        /*分区总扇区数*/
}PartitionTable;

/*定义主引导扇区结构*/
typedef struct
{
    CHAR             bootcode[0x1be];    /*启动代码*/
    PartitionTable     PT[4];             /*分区表*/
    WORD             EndingFlag;         /*结束标识*/
}MBR;

/*磁盘介质类型*/
enum MediaType
{
    HardDisk = 0xf8,           /*硬盘*/
	RAMDisk  = 0xfa            /*RAM盘*/
};

/*
引导扇区是文件系统的第一个扇区,其中包含分区重要的数据信息——BPB(BIOS Paramenter
Block-磁盘参数表)。磁盘参数表中包含分区总大小、磁盘参数等重要信息。其C语言定义为:
*/
typedef struct
{
    BYTE    JMPCode[3];            /*引导跳转代码*/
    CHAR    System_ID[8];          /*厂商标志和版本号*/
    WORD     BytesPerSector;       /*每扇区字节数*/
    BYTE     SectorsPerCluster;    /*每簇扇区数*/
    WORD     ReservedSectors;      /*保留扇区数*/
    BYTE     FatNum;               /*FAT的个数*/
    WORD     RootEntry;            /*根目录项数*/
    WORD     TotalSectors;         /*分区总扇区数(分区小于32M时)*/
    MediaType    Media;            /*分区介质标识*/
    WORD     SectorsPerFAT;        /*每个FAT占的扇区数*/
    WORD     SectorsPerTrack;      /*每道扇区数*/
    WORD     Heads;                /*磁头数*/
    DWORD     HiddenSectorNum;       /*隐含扇区数*/
    DWORD     BigTotalSectors;     /*分区总扇区数(分区大于32M时)*//*end of 23 Bytes*/
    BYTE    Drive;                 /*驱动器号*/
    BYTE    Head;                  /*磁头号*/
    BYTE    boot_rec_sig;          /*含义未知*/
    WORD    Vol_Serial_NoL;        /*磁盘序列号*/
    WORD    Vol_Serial_NoH;        
    CHAR    Label[11];             /*磁盘卷标号*/
    CHAR    FileSys_ID[8];         /*文件系统标识号*/
    BYTE    BootCode[450];         /*启动代码*/
}BPB_FAT;

/*定义驱动器参数块,方便文件管理*/
typedef struct
{
    BYTE    DriveNo;               /* 驱动器号,A = 1,B = 2,etc.*/
    BYTE    PhyDrive;              /* 物理驱动器号*/
    WORD    BytePerSec;            /*每扇区字节数*/
    WORD    SectorsPerTrack;       /*每道扇区号*/
    BYTE    SecPerClu;             /*每簇扇区数,以零为基数*/
    WORD    FirstFATSec;           /*包含第一个FAT的扇区号*/
    BYTE    FATNum;                /*FAT份数*/
    WORD    RootEntryNum;          /*根目录项数*/
    WORD    FirstDataSec;          /*第一个数据扇区号*/
    WORD    LastClu;               /*最后一个簇*/
    WORD    SecPreFAT;             /*每FAT扇区数*/
    WORD    RootStartSec;          /*根目录起始扇区号*/
    MediaType    MediaID;          /*介质描述字节*/
    WORD    FirstFreeClu;          /*第一个自由的簇号,= -1 未知*/
    WORD    FreeClu;               /*自由簇数*/
    DWORD    RelativeSectors;      /*指BOOT扇区以前的扇区数*/
    DWORD     TotalSectors;        /*本分区总的扇区数*/
} DPB; 

/*目录项中的时间和日期定义*/
typedef    struct
{
    WORD    Sec;
    WORD    Min;
    WORD    Hour;
} FILEMIDTIME;

typedef    struct
{
    WORD    Day;
    WORD    Mon;
    WORD    Year;
} FILEMIDDATE;

#define		FILENAMELEN	        9
#define		FILEEXTNAMELEN		4

/*目录表项的含义*/
typedef struct
{
    CHAR         FileName[FILENAMELEN];          /*主文件名*/
    CHAR         ExtName[FILEEXTNAMELEN];        /*扩展文件名*/
    BYTE         ReadOnly:1;                     /*文件属性,只读位*/
    BYTE         Hidden:1;                       /*隐含*/
    BYTE         System:1;                       /*系统*/
    BYTE         Volume:1;                       /*卷标*/
    BYTE         Directory:1;                    /*目录*/
    BYTE         Archives:1;                     /*档案*/
    CHAR         Reserved[11];                   /*保留*/
    FILEMIDTIME  FileCreTime;                    /*文件创建时间*/
    FILEMIDDATE  FileCreDate;                    /*日期*/
    WORD         StartCluster;                   /*起始簇*/
    DWORD        FileLength;                     /*文件长度*/
}Directory_FAT;

/*目录项首字节含义*/
enum DirFirstChar
{
        DirUnUsed            = 0x00,         /*本表项没有使用*/
		DirCharE5             = 0x05,        /*首字符为0xe5*/
		DirisSubDir         = 0x2e,          /*是一个子目录 .,..为父目录*/
		DirFileisDeleted     = 0xe5          /*文件已删除*/
}; 

/*文件结点*/
typedef struct
{
    WORD    UserCount;                 /*文件用户数*/
    WORD    Mode;                      /*打开模式,读,写*/

    struct
    {
        BOOL    DirIsModified:1;        /*目录项是否已改变*/
        BOOL    DirIsNew:1;             /*目录项是新建的*/
        BOOL    DirIsFull:1;            /*目录是否已满*/
    } DirFlag;

    Directory_FAT     DirImg;           /*本文件目录映像*/
    DWORD    DirOffset;                 /*本目录项偏移*/
    DWORD    DirStart;                  /*本目录起始扇区*/
    DPB        *FileDPB;                /*文件设备块*/
    DWORD    ByteOffset;                /*当前文件指针字节偏移*/
    DWORD    LargeOffset;               /*文件最大偏移量*/
    WORD    BackClu;                    /*前一个簇*/
    WORD    CurrClu;                    /*当前簇*/
    BYTE    SectorInClu;                /*簇中的扇区*/
    WORD    ByteInClu;                  /*在簇中的字节数*/
} FILENODE;

/*分区类型*/
enum PartionType
{
    ParUNUsed          = 0x00,         /*分区没有使用*/
		FAT12          = 0x01,
		XENIX          = 0x02,
		FAT16          = 0x04,
		Extend         = 0x05,
		BigDOS         = 0x06,
		HPFS           = 0x07,
		SPLIT          = 0x08,
		FAT32          = 0x0b,
		DM             = 0x50,
		GB             = 0x56,
		SPEED          = 0x61,
		ix386          = 0x63,
		Novell286      = 0x64,
		Novell386      = 0x65,
		PCIX           = 0x75,
		CPM            = 0xdb,
		BBT            = 0xff
};
/*FAT16 FAT表项的含义*/
enum FAT16TYPE
{
        FATUnUsed      = 0,             /*尚未分配*/
		FATReserved    = 0xFFF0,        /*保留*/
		FATReserved1   = 0xFFF0,        
		FATReserved2   = 0xFFF1,
		FATReserved3   = 0xFFF2,
		FATReserved4   = 0xFFF3,
		FATReserved5   = 0xFFF4,
		FATReserved6   = 0xFFF6, 
		FATBADClu      = 0xFFF7,        /*表示坏簇,即该簇中磁盘有损坏;*/
		FileEnd		   = 0xFFFF,        /*文件结束标识*/
		FileEnd1       = 0xFFF8,        
		FileEnd2       = 0xFFF9,
		FileEnd3       = 0xFFFA,
		FileEnd4       = 0xFFFB,
		FileEnd5       = 0xFFFC,
		FileEnd6       = 0xFFFD,
		FileEnd7       = 0xFFFE,
		FileEnd8       = 0xFFFF
};

/*硬盘缓存结构*/
#define BUFFERSIZE     512
typedef struct _BUFFER 
{
    struct _BUFFER   *B_pNext;         /* 指向下一个缓存块               */
    BYTE    uc_DiskNo;                 /* 硬盘号                         */
    BYTE    uc_Flag;                   /* 缓存标志,净、不净             */
    DWORD   ui_SectorNo;               /* 缓存对应的逻辑扇区号           */
    BYTE    uc_Buffer [BUFFERSIZE];    /* 数据缓存BUFFERSIZE=512字节     */
} BUFFER;

typedef struct
{
    DWORD Sector;           /*当前扇区*/
    WORD  CluInSec;         /*簇号在扇区中的偏移*/
}CLUINFAT;

typedef struct
{
    DWORD ClusterNum;           /*当前扇区*/
    WORD  DirOffset;         /*目录项在扇区中的偏移*/
}DIRINCLU;

typedef struct
{
    DWORD SectorNum;
    BYTE IsValid:1;         /*指示数据有效性*/
    BYTE Data[512];
}ABS_SEC_BUF;

typedef struct
{
	DWORD SectorNum;
	BYTE IsValid:1;
	WORD Data[256];
}WORD_SEC_BUF;

typedef struct
{
    DWORD SectorNum;
    BYTE IsValid:1;         /*指示数据有效性*/
    DWORD Data[128];
}FAT_BUF;

typedef struct _PATHINFO
{
	CByteArray  ByteArray;
	INT			  nLayer;
	_PATHINFO*	pNext;
}PATHINFO;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -