📄 struct.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 + -