windows-nt/Source/XPSP1/NT/base/efiutil/sdk/shell/debug/fat.h
2020-09-26 16:20:57 +08:00

132 lines
3.7 KiB
C

/*++
Copyright (c) 1998 Intel Corporation
Module Name:
fat.h
Abstract:
On disk fat structures
Revision History
--*/
typedef enum {
FAT12,
FAT16,
FAT32,
FatUndefined
} FAT_VOLUME_TYPE;
#pragma pack(1)
/*
* Used for fat12 & fat16
*/
typedef struct {
UINT8 Ia32Jump[3];
CHAR8 OemId[8];
UINT16 SectorSize;
UINT8 SectorsPerCluster;
UINT16 ReservedSectors;
UINT8 NoFats;
UINT16 RootEntries; /* < FAT32, root dir is fixed size */
UINT16 Sectors;
UINT8 Media; /* (ignored) */
UINT16 SectorsPerFat; /* < FAT32 */
UINT16 SectorsPerTrack; /* (ignored) */
UINT16 Heads; /* (ignored) */
UINT32 HiddenSectors; /* (ignored) */
UINT32 LargeSectors; /* => FAT32 */
UINT8 PhysicalDriveNumber; /* (ignored) */
UINT8 CurrentHead; /* holds boot_sector_dirty bit */
UINT8 Signature; /* (ignored) */
CHAR8 Id[4];
CHAR8 FatLabel[11];
CHAR8 SystemId[8];
} FAT_BOOT_SECTOR;
typedef struct {
UINT8 Ia32Jump[3];
CHAR8 OemId[8];
UINT16 SectorSize;
UINT8 SectorsPerCluster;
UINT16 ReservedSectors;
UINT8 NoFats;
UINT16 RootEntries; /* < FAT32, root dir is fixed size */
UINT16 Sectors;
UINT8 Media; /* (ignored) */
UINT16 SectorsPerFat; /* < FAT32 */
UINT16 SectorsPerTrack; /* (ignored) */
UINT16 Heads; /* (ignored) */
UINT32 HiddenSectors; /* (ignored) */
UINT32 LargeSectors; /* Used if Sectors==0 */
UINT32 LargeSectorsPerFat; /* FAT32 */
UINT16 ExtendedFlags; /* FAT32 (ignored) */
UINT16 FsVersion; /* FAT32 (ignored) */
UINT32 RootDirFirstCluster; /* FAT32 */
UINT16 FsInfoSector; /* FAT32 */
UINT16 BackupBootSector; /* FAT32 */
UINT8 Reserved[12]; /* FAT32 (ignored) */
UINT8 PhysicalDriveNumber; /* (ignored) */
UINT8 CurrentHead; /* holds boot_sector_dirty bit */
UINT8 Signature; /* (ignored) */
CHAR8 Id[4];
CHAR8 FatLabel[11];
CHAR8 SystemId[8];
} FAT_BOOT_SECTOR_EX;
/*
* ignored - means not used in the EFI driver
*
* For <Fat32 RootEntries indicates the number of entries in the root directory,
* and SectorsPerFat is used to size the fact table
*/
typedef struct {
UINT16 Day:5;
UINT16 Month:4;
UINT16 Year:7; /* From 1980 */
} FAT_DATE;
typedef struct {
UINT16 DoubleSecond:5;
UINT16 Minute:6;
UINT16 Hour:5;
} FAT_TIME;
typedef struct {
FAT_TIME Time;
FAT_DATE Date;
} FAT_DATE_TIME;
typedef struct {
CHAR8 FileName[11]; /* 8.3 filename */
UINT8 Attributes;
UINT8 CaseFlag;
UINT8 CreateMillisecond; /* (creation milliseconds - ignored) */
FAT_DATE_TIME FileCreateTime;
FAT_DATE FileLastAccess;
UINT16 FileClusterHigh; /* >= FAT32 */
FAT_DATE_TIME FileModificationTime;
UINT16 FileCluster;
UINT32 FileSize;
} FAT_DIRECTORY_ENTRY;
#pragma pack()