ReactOS  0.4.15-dev-5109-g2469ce2
fat.h File Reference
#include <pshpack1.h>
#include <poppack.h>
Include dependency graph for fat.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _FAT_BOOTSECTOR
 
struct  _FAT32_BOOTSECTOR
 
struct  _FATX_BOOTSECTOR
 
struct  DIRENTRY
 
struct  LFN_DIRENTRY
 
struct  FATX_DIRENTRY
 
struct  FAT_FILE_INFO
 

Macros

#define ATTR_NORMAL   0x00
 
#define ATTR_READONLY   0x01
 
#define ATTR_HIDDEN   0x02
 
#define ATTR_SYSTEM   0x04
 
#define ATTR_VOLUMENAME   0x08
 
#define ATTR_DIRECTORY   0x10
 
#define ATTR_ARCHIVE   0x20
 
#define ATTR_LONG_NAME   (ATTR_READONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUMENAME)
 
#define FAT12   1
 
#define FAT16   2
 
#define FAT32   3
 
#define FATX16   4
 
#define FATX32   5
 
#define ISFATX(FT)   ((FT) == FATX16 || (FT) == FATX32)
 

Typedefs

typedef struct _FAT_BOOTSECTOR FAT_BOOTSECTOR
 
typedef struct _FAT_BOOTSECTORPFAT_BOOTSECTOR
 
typedef struct _FAT32_BOOTSECTOR FAT32_BOOTSECTOR
 
typedef struct _FAT32_BOOTSECTORPFAT32_BOOTSECTOR
 
typedef struct _FATX_BOOTSECTOR FATX_BOOTSECTOR
 
typedef struct _FATX_BOOTSECTORPFATX_BOOTSECTOR
 
typedef struct DIRENTRYPDIRENTRY
 
typedef struct LFN_DIRENTRYPLFN_DIRENTRY
 
typedef struct FATX_DIRENTRYPFATX_DIRENTRY
 
typedef struct _FAT_VOLUME_INFOPFAT_VOLUME_INFO
 
typedef struct FAT_FILE_INFOPFAT_FILE_INFO
 

Functions

const DEVVTBLFatMount (ULONG DeviceId)
 

Macro Definition Documentation

◆ ATTR_ARCHIVE

#define ATTR_ARCHIVE   0x20

Definition at line 164 of file fat.h.

◆ ATTR_DIRECTORY

#define ATTR_DIRECTORY   0x10

Definition at line 163 of file fat.h.

◆ ATTR_HIDDEN

#define ATTR_HIDDEN   0x02

Definition at line 160 of file fat.h.

◆ ATTR_LONG_NAME

Definition at line 165 of file fat.h.

◆ ATTR_NORMAL

#define ATTR_NORMAL   0x00

Definition at line 158 of file fat.h.

◆ ATTR_READONLY

#define ATTR_READONLY   0x01

Definition at line 159 of file fat.h.

◆ ATTR_SYSTEM

#define ATTR_SYSTEM   0x04

Definition at line 161 of file fat.h.

◆ ATTR_VOLUMENAME

#define ATTR_VOLUMENAME   0x08

Definition at line 162 of file fat.h.

◆ FAT12

#define FAT12   1

Definition at line 167 of file fat.h.

◆ FAT16

#define FAT16   2

Definition at line 168 of file fat.h.

◆ FAT32

#define FAT32   3

Definition at line 169 of file fat.h.

◆ FATX16

#define FATX16   4

Definition at line 170 of file fat.h.

◆ FATX32

#define FATX32   5

Definition at line 171 of file fat.h.

◆ ISFATX

#define ISFATX (   FT)    ((FT) == FATX16 || (FT) == FATX32)

Definition at line 173 of file fat.h.

Typedef Documentation

◆ FAT32_BOOTSECTOR

◆ FAT_BOOTSECTOR

◆ FATX_BOOTSECTOR

◆ PDIRENTRY

◆ PFAT32_BOOTSECTOR

◆ PFAT_BOOTSECTOR

◆ PFAT_FILE_INFO

◆ PFAT_VOLUME_INFO

Definition at line 146 of file fat.h.

◆ PFATX_BOOTSECTOR

◆ PFATX_DIRENTRY

◆ PLFN_DIRENTRY

Function Documentation

◆ FatMount()

const DEVVTBL* FatMount ( ULONG  DeviceId)

Definition at line 1560 of file fat.c.

1561 {
1563  UCHAR Buffer[512];
1566  PFATX_BOOTSECTOR BootSectorX = (PFATX_BOOTSECTOR)Buffer;
1569  ULONG Count;
1572 
1573  TRACE("Enter FatMount(%lu)\n", DeviceId);
1574 
1575  //
1576  // Allocate data for volume information
1577  //
1579  if (!Volume)
1580  return NULL;
1582 
1583  //
1584  // Read the BootSector
1585  //
1586  Position.QuadPart = 0;
1587  Status = ArcSeek(DeviceId, &Position, SeekAbsolute);
1588  if (Status != ESUCCESS)
1589  {
1591  return NULL;
1592  }
1593  Status = ArcRead(DeviceId, Buffer, sizeof(Buffer), &Count);
1594  if (Status != ESUCCESS || Count != sizeof(Buffer))
1595  {
1597  return NULL;
1598  }
1599 
1600  //
1601  // Check if BootSector is valid. If no, return early
1602  //
1603  if (!RtlEqualMemory(BootSector->FileSystemType, "FAT12 ", 8) &&
1604  !RtlEqualMemory(BootSector->FileSystemType, "FAT16 ", 8) &&
1605  !RtlEqualMemory(BootSector32->FileSystemType, "FAT32 ", 8) &&
1606  !RtlEqualMemory(BootSectorX->FileSystemType, "FATX", 4))
1607  {
1609  return NULL;
1610  }
1611 
1612  //
1613  // Determine sector count
1614  //
1616  if (Status != ESUCCESS)
1617  {
1619  return NULL;
1620  }
1621  SectorCount.QuadPart = (FileInformation.EndingAddress.QuadPart - FileInformation.StartingAddress.QuadPart);
1622  SectorCount.QuadPart /= SECTOR_SIZE;
1623 
1624  //
1625  // Keep device id
1626  //
1627  Volume->DeviceId = DeviceId;
1628 
1629  //
1630  // Really open the volume
1631  //
1632  if (!FatOpenVolume(Volume, BootSector, SectorCount.QuadPart))
1633  {
1635  return NULL;
1636  }
1637 
1638  //
1639  // Remember FAT volume information
1640  //
1641  FatVolumes[DeviceId] = Volume;
1642 
1643  //
1644  // Return success
1645  //
1646  TRACE("FatMount(%lu) success\n", DeviceId);
1647  return (ISFATX(Volume->FatType) ? &FatXFuncTable : &FatFuncTable);
1648 }
Definition: arc.h:32
static COORD Position
Definition: mouse.c:34
#define ISFATX(FT)
Definition: fat.h:173
static OUT PIO_STATUS_BLOCK OUT PVOID FileInformation
Definition: pipe.c:75
ULONG ARC_STATUS
Definition: arc.h:4
FORCEINLINE PVOID FrLdrTempAlloc(_In_ SIZE_T Size, _In_ ULONG Tag)
Definition: mm.h:188
Definition: bufpool.h:45
struct _FAT32_BOOTSECTOR * PFAT32_BOOTSECTOR
Status
Definition: gdiplustypes.h:24
int Count
Definition: noreturn.cpp:7
#define TRACE(s)
Definition: solgame.cpp:4
NTSYSAPI ULONG NTAPI RtlEqualMemory(CONST VOID *Source1, CONST VOID *Source2, ULONG Length)
PFAT_VOLUME_INFO FatVolumes[MAX_FDS]
Definition: fat.c:58
#define TAG_FAT_VOLUME
Definition: fat.c:33
ARC_STATUS ArcRead(ULONG FileId, VOID *Buffer, ULONG N, ULONG *Count)
Definition: fs.c:236
unsigned char UCHAR
Definition: xmlstorage.h:181
const DEVVTBL FatXFuncTable
Definition: fat.c:1550
ARC_STATUS ArcSeek(ULONG FileId, LARGE_INTEGER *Position, SEEKMODE SeekMode)
Definition: fs.c:243
const DEVVTBL FatFuncTable
Definition: fat.c:1540
ULONG SectorCount
Definition: part_xbox.c:31
BOOLEAN FatOpenVolume(PFAT_VOLUME_INFO Volume, PFAT_BOOTSECTOR BootSector, ULONGLONG PartitionSectorCount)
Definition: fat.c:138
struct _FAT_BOOTSECTOR * PFAT_BOOTSECTOR
#define NULL
Definition: types.h:112
ARC_STATUS ArcGetFileInformation(ULONG FileId, FILEINFORMATION *Information)
Definition: fs.c:250
unsigned int ULONG
Definition: retypes.h:1
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define SECTOR_SIZE
Definition: fs.h:22
CHAR FileSystemType[4]
Definition: fat.h:90
struct _FATX_BOOTSECTOR * PFATX_BOOTSECTOR
FORCEINLINE VOID FrLdrTempFree(PVOID Allocation, ULONG Tag)
Definition: mm.h:197