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

📄 fat.h

📁 sd card for pxa270 (在bootloader 下)
💻 H
📖 第 1 页 / 共 2 页
字号:
    USHORT MediaStatusNotification:2;       // 127 Removable Media Status Notification Support
    USHORT SecurityStatus;                  // 128 Security Status
    USHORT Reserved8[31];                   // 129-159 Vendor Specific
    USHORT CFAPowerMode1;                   // 160
    USHORT Reserved9[94];                   // 161-254
    USHORT IntegrityWord;                   // 255 Checksum & Signature    
} IDENTIFY_DATA, *PIDENTIFY_DATA;
#endif
#pragma pack()

//DBR区(DOS BOOT RECORD)即操作系统引导记录区,通常占用分区的第0扇区共512个字节,这里只是fat16的
typedef struct _BOOTSECT {
    UCHAR   x86Jump[3];                     // [00] x86跳转指令
    UCHAR   OEMName[8];                     // [03] OOEM ID,它是一个字符串, OEM ID标识了格式化该分区的操作系统的名称和版本号
//接下来的从偏移0x0B开始的是一段描述能够使可执行引导代码找到相关参数的信息。通常称之为BPB(BIOS Parameter Block)。
    UCHAR   BytesPerSec[2];                 // [0b] 扇区字节数合法的十进制值有512、1024、2048和4096
    UCHAR   SecPerAlloc;                    // [0d] 每簇扇区数合法十进制值有1、2、4、8、16、32、64和128
    USHORT  ResvSectors;                    // [0e] 保留扇区数,第一个FAT开始之前的扇区数,包括引导扇区,十进制值一般为32
    UCHAR   NumFATs;                        // [10] 该分区上FAT的副本数,一般为2
    UCHAR   RootDirEntries[2];              // [11] 保存在根目录中32字节长的文件或子目录项数,只有FAT12/FAT16使用此字段,FAT32分区本字段必须设置为 0
    UCHAR   LogSectors[2];                  // [13] 小扇区数(Small Sector)(只有FAT12/FAT16使用此字段)对FAT32分区而言,本字段必须设置为0
    UCHAR   MediaDesc;                      // [15] 媒体描述符( Media Descriptor)提供有关媒体被使用的信息,媒体是硬盘、软盘等
    USHORT  SectorsPerFAT;                  // [16] 每FAT扇区数(Sectors Per FAT)只被FAT12/FAT16所使用,对FAT32分区而言,本字段必须设置为0
    USHORT  SectorsPerTrack;                // [18] 每道扇区数(Sectors Per Track) 包含使用INT13h的磁盘的“每道扇区数”几何结构值。该分区被多个磁头的柱面分成了多个磁道
    USHORT  NumHeads;                       // [1a] 磁头数(Number of Head) 本字段包含使用INT 13h的磁盘的“磁头数”几何结构值
    ULONG  HiddenSectors;                   // [1c] 隐藏扇区数(Hidden Sector) 该分区上引导扇区之前的扇区数
    ULONG   BigSectors;						// [20] 大扇区数,如果小扇区不为0,那么这个为0
////////////////FAT16分区的扩展BPB字段///////////////////////////
//	UCHAR	PhysicalDriveNumber;			// [24] 物理驱动器号( Physical Drive Number) 与BIOS物理驱动器号有关。软盘驱动器被标识为0x00,物理硬盘被标识为0x80,而与物理磁盘驱动器无关。
//	UCHAR	Reserved1;						// [25] 保留(Reserved) FAT32分区总是将本字段的值设置为0
//	UCHAR	ExtendedBootSignature;			// [26] 扩展引导标签(Extended Boot Signature) 本字段必须要有能被Windows 2000所识别的值0x28或0x29
//	ULONG	VolumeSerialNumber;				// [27] 分区序号(Volume Serial Number) 在格式化磁盘时所产生的一个随机序号,它有助于区分磁盘
//	UCHAR	VolumeLabel[11];				// [2b] 卷标(Volume Label) 本字段只能使用一次,它被用来保存卷标号。现在,卷标被作为一个特殊文件保存在根目录中
//	UCHAR	SystemID[8];					// [36] 系统ID(System ID) FAT16文件系统中一般取为"FAT16"
} BOOTSECT;

//DBR区(DOS BOOT RECORD)即操作系统引导记录区,通常占用分区的第0扇区共512个字节,这里只是fat32的
typedef struct _BOOTSECT32 {
    UCHAR   x86Jump[3];                     // [00] x86跳转指令
    UCHAR   OEMName[8];                     // [03] OOEM ID,它是一个字符串, OEM ID标识了格式化该分区的操作系统的名称和版本号
//接下来的从偏移0x0B开始的是一段描述能够使可执行引导代码找到相关参数的信息。通常称之为BPB(BIOS Parameter Block)。
    UCHAR   BytesPerSec[2];                 // [0b] 扇区字节数合法的十进制值有512、1024、2048和4096
    UCHAR   SecPerAlloc;                    // [0d] 每簇扇区数合法十进制值有1、2、4、8、16、32、64和128
    USHORT  ResvSectors;                    // [0e] 保留扇区数,第一个FAT开始之前的扇区数,包括引导扇区,十进制值一般为32
    UCHAR   NumFATs;                        // [10] 该分区上FAT的副本数,一般为2
    UCHAR   RootDirEntries[2];              // [11] 保存在根目录中32字节长的文件或子目录项数,只有FAT12/FAT16使用此字段,FAT32分区本字段必须设置为 0
    UCHAR   LogSectors[2];                  // [13] 小扇区数(Small Sector)(只有FAT12/FAT16使用此字段)对FAT32分区而言,本字段必须设置为0
    UCHAR   MediaDesc;                      // [15] 媒体描述符( Media Descriptor)提供有关媒体被使用的信息,媒体是硬盘、软盘等,win2000未使用
    USHORT  SectorsPerFAT;                  // [16] 每FAT扇区数(Sectors Per FAT)只被FAT12/FAT16所使用,对FAT32分区而言,本字段必须设置为0
    USHORT  SectorsPerTrack;                // [18] 每道扇区数(Sectors Per Track) 包含使用INT13h的磁盘的“每道扇区数”几何结构值。该分区被多个磁头的柱面分成了多个磁道
    USHORT  NumHeads;                       // [1a] 磁头数(Number of Head) 本字段包含使用INT 13h的磁盘的“磁头数”几何结构值
    ULONG	HiddenSectors;                  // [1c] 隐藏扇区数(Hidden Sector) 该分区上引导扇区之前的扇区数
    ULONG   BigSectors;						// [20] 大扇区数,fat32这里表示总扇区数
////////////////////FAT32 Section///////////////////////////////////////////////
	ULONG	SectorsPerFAT32;				// [24] 每FAT扇区数(Sectors Per FAT)(只被FAT32使用)该分区每个FAT所占的扇区数。
	USHORT	ExtendedFlag;					// [28] 扩展标志(Extended Flag)(只被FAT32使用)该两个字节结构中各位的值为:位0-3:活动 FAT数(从0开始计数,而不是1).只有在不使用镜像时才有效 位4-6:保留位7:0值意味着在运行时FAT被映射到所有的FAT 1值表示只有一个FAT是活动的 位8-15:保留
	USHORT	FileSystemVersion;				// [2A] 文件系统版本(File ystem Version)只供FAT32使用,高字节是主要的修订号,而低字节是次要的修订号
	ULONG	RootClusterNumber;				// [2C] 根目录簇号(Root Cluster Number)(只供FAT32使用) 根目录第一簇的簇号。本字段的值一般为2,但不总是如此
	USHORT	FSIS;							// [30] 文件系统信息扇区号(File System Information SectorNumber)(只供FAT32使用) FAT32分区的保留区中的文件系统信息(File System Information, FSINFO)结构的扇区号。其值一般为1。在备份引导扇区(Backup Boot Sector)中保留了该FSINFO结构的一个副本,但是这个副本不保持更新
	USHORT  BackUpBootSect;					// [32] 备份引导扇区(只供FAT32使用) 为一个非零值,这个非零值表示该分区保存引导扇区的副本的保留区中的扇区号。本字段的值一般为6,建议不要使用其他值
	UCHAR	Reseverd[12];					// [34] 保留(只供FAT32使用)供以后扩充使用的保留空间。本字段的值总为0
///////////////////////FAT32分区的扩展BPB字段 ////////////////////////////
//	UCHAR	PhysicalDriveNumber;			// [40] 物理驱动器号( Physical Drive Number) 与BIOS物理驱动器号有关。软盘驱动器被标识为0x00,物理硬盘被标识为0x80,而与物理磁盘驱动器无关。
//	UCHAR	Reserved1;						// [41] 保留(Reserved) FAT32分区总是将本字段的值设置为0
//	UCHAR	ExtendedBootSignature;			// [42] 扩展引导标签(Extended Boot Signature) 本字段必须要有能被Windows 2000所识别的值0x28或0x29
//	ULONG	VolumeSerialNumber;				// [43] 分区序号(Volume Serial Number) 在格式化磁盘时所产生的一个随机序号,它有助于区分磁盘
//	UCHAR	VolumeLabel[11];				// [47] 卷标(Volume Label) 本字段只能使用一次,它被用来保存卷标号。现在,卷标被作为一个特殊文件保存在根目录中
//	UCHAR	SystemID[8];					// [52] 系统ID(System ID) FAT32文件系统中一般取为"FAT32"
} BOOTSECT32;

typedef struct _DIRENTRY {
    UCHAR   FileName[8];                    // [00] 文件名
    UCHAR   Extension[3];                   // [08] 文件扩展名
    UCHAR   Attribute;                      // [0b] 属性0读写1只读10隐藏100系统1000卷标10000子目录100000归档
    UCHAR   Reserved[10];                   // [0c] 系统保留
    USHORT  AccessTime;                     // [16] 最近修改时间
    USHORT  AccessDate;                     // [18] 最近修改日期
    USHORT  StartCluster;                   // [1a] 文件首簇号
    ULONG   Length;                         // [1c] 文件长度
} DIRENTRY;
////////////////FAT32短文件目录项32个字节的表示定义//////////////
typedef struct _DIRENTRY32 {
    UCHAR   FileName[8];                    // [00] 文件名
    UCHAR   Extension[3];                   // [08] 文件扩展名
    UCHAR   Attribute;                      // [0b] 属性0读写1只读10隐藏100系统1000卷标10000子目录100000归档
    UCHAR   Reserved;						// [0c] 系统保留
	UCHAR	CreateTimeMs;					// [0d] 文件创建10毫秒位
	USHORT	CreateTime;						// [0e] 文件创建时间
	USHORT	CreateDate;						// [10] 文件创建日期
	USHORT	AccessLastDate;					// [12] 文件最后访问日期
	USHORT	StartClusterH;					// [14] 文件起始簇号的高16位
    USHORT  AccessTime;                     // [16] 最近修改时间
    USHORT  AccessDate;                     // [18] 最近修改日期
    USHORT  StartClusterL;                  // [1a] 文件起始簇号的低16位
    ULONG   Length;                         // [1c] 文件长度
} DIRENTRY32;
//
//  Partition Table structure. Currently only one partition is supported
//
//这里记录的是MBR除去引导信息的硬盘信息   0x1be+offset
typedef struct _PARTITION {
    UCHAR   BootFlag;                       // [00] 引导指示符,指示该分区是否活动分区
    UCHAR   Start[3];                       // [01] 开始磁头开始扇区6位开始柱面10位,其中1位表示该柱面数
    UCHAR   SystemFlag;                     // [04] 分区类型
    UCHAR   End[3];                         // [05] 结束……
    ULONG   StartSector;                    // [08] 从磁盘开始到该分区开始的偏移量,以扇区为单位
    ULONG   NumSectors;                     // [0c] 总扇区数
} PARTITION;					
//
// ATA Device Structure
//

typedef struct _SECTORNUM {
    BOOLEAN LBA;                            // TRUE if LBA Sector number
    union {
        ULONG   LBASector;                  // Sector number in LBA form
        struct {
            USHORT  Cylinder;               // Cylinder
            UCHAR   Head;                   // Disk Head number
            UCHAR   Sector;                 // Sector
        };
    } u;
} SECTORNUM;

typedef struct _ATA_DEVICE {
    UCHAR   DriveNumberMask;                // 0x00=Master 0x10=Slave

    USHORT  BytesPerSec;                    // # of bytes per sector
    USHORT  SecPerCluster;                  // Size of each allocation unit
    USHORT  SecPerTrack;                    // # of sectors per track
    USHORT  Heads;                          // # of heads
    USHORT  NumCyl;                         // # of Cylinders
    USHORT  ResvSectors;                    // # of Reserve Sectors
    PARTITION Partition;                    // Primary Partition Information
    UCHAR   NumFATs;                        // FAT Number from boot sector
    USHORT  SecPerFAT;                      // Sectors per FAT from boot sector
    ULONG  DirEntries;                     // Number of root directory entries

    volatile char *FATBuf;                  // Pointer to the device FAT
    
} ATA_DEVICE;
////////////////////////////////////////////////////


void CFBoot();
//extern void OEMLaunchCE(DWORD dwImageStart,DWORD dwImageLength,DWORD dwLaunchAddr);//game
ULONG CFATAInitializeDevice(IN ULONG DriveNumber);

ULONG CFFATExtractName(IN PUCHAR Pathname, IN PUCHAR Filename);
void CFFATFileClose(IN ULONG FileDesc);
BOOL CFFATReadBin(IN PUCHAR FileName,
                  OUT PULONG JumpAddress,
                  OUT PULONG pulSize,
                  OUT PULONG pulImageAddress);
ULONG CFFATGetNextCluster(IN OUT ATA_DEVICE *Disk,
                          IN     ULONG       Cluster);
ULONG CFFATFileSize(IN ULONG FileDesc);
ULONG CFFATFileSeek(IN ULONG FileDesc, IN ULONG Position);
ULONG CFFATFileRead(IN  ULONG   FileDesc,
                    IN  ULONG   Length,
                    OUT PUCHAR  DataBuf);
ULONG CFFATFileOpen(IN PUCHAR Filename);
////////////////////////////////////////////////////
#endif

⌨️ 快捷键说明

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