2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS File System Recognizer
4 * FILE: drivers/filesystems/fs_rec/fs_rec.h
5 * PURPOSE: Main Header File
6 * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
18 // Tag for memory allocations
20 #define FSREC_TAG 'cRsF'
25 #define UDFS_VRS_START_OFFSET 32768
26 #define UDFS_AVDP_SECTOR 256
29 // Non-standard rounding macros
31 #define ROUND_UP(n, align) \
32 ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
34 #define ROUND_DOWN(n, align) \
35 (((ULONG)n) & ~((align) - 1l))
38 // Conversion types and macros taken from internal ntifs headers
49 USHORT ForceAlignment
;
58 #define CopyUchar1(Dst,Src) { \
59 *((UCHAR1 *)(Dst)) = *((UNALIGNED UCHAR1 *)(Src)); \
62 #define CopyUchar2(Dst,Src) { \
63 *((UCHAR2 *)(Dst)) = *((UNALIGNED UCHAR2 *)(Src)); \
66 #define CopyUchar4(Dst,Src) { \
67 *((UCHAR4 *)(Dst)) = *((UNALIGNED UCHAR4 *)(Src)); \
70 #define FatUnpackBios(Bios,Pbios) { \
71 CopyUchar2(&(Bios)->BytesPerSector, &(Pbios)->BytesPerSector[0] ); \
72 CopyUchar1(&(Bios)->SectorsPerCluster, &(Pbios)->SectorsPerCluster[0]); \
73 CopyUchar2(&(Bios)->ReservedSectors, &(Pbios)->ReservedSectors[0] ); \
74 CopyUchar1(&(Bios)->Fats, &(Pbios)->Fats[0] ); \
75 CopyUchar2(&(Bios)->RootEntries, &(Pbios)->RootEntries[0] ); \
76 CopyUchar2(&(Bios)->Sectors, &(Pbios)->Sectors[0] ); \
77 CopyUchar1(&(Bios)->Media, &(Pbios)->Media[0] ); \
78 CopyUchar2(&(Bios)->SectorsPerFat, &(Pbios)->SectorsPerFat[0] ); \
79 CopyUchar2(&(Bios)->SectorsPerTrack, &(Pbios)->SectorsPerTrack[0] ); \
80 CopyUchar2(&(Bios)->Heads, &(Pbios)->Heads[0] ); \
81 CopyUchar4(&(Bios)->HiddenSectors, &(Pbios)->HiddenSectors[0] ); \
82 CopyUchar4(&(Bios)->LargeSectors, &(Pbios)->LargeSectors[0] ); \
86 // Packed versions of the BPB and Boot Sector
88 typedef struct _PACKED_BIOS_PARAMETER_BLOCK
90 UCHAR BytesPerSector
[2];
91 UCHAR SectorsPerCluster
[1];
92 UCHAR ReservedSectors
[2];
97 UCHAR SectorsPerFat
[2];
98 UCHAR SectorsPerTrack
[2];
100 UCHAR HiddenSectors
[4];
101 UCHAR LargeSectors
[4];
102 } PACKED_BIOS_PARAMETER_BLOCK
, *PPACKED_BIOS_PARAMETER_BLOCK
;
104 typedef struct _PACKED_BOOT_SECTOR
108 PACKED_BIOS_PARAMETER_BLOCK PackedBpb
;
109 UCHAR PhysicalDriveNumber
;
113 UCHAR VolumeLabel
[11];
115 } PACKED_BOOT_SECTOR
, *PPACKED_BOOT_SECTOR
;
118 // Unpacked version of the BPB
120 typedef struct BIOS_PARAMETER_BLOCK
122 USHORT BytesPerSector
;
123 UCHAR SectorsPerCluster
;
124 USHORT ReservedSectors
;
129 USHORT SectorsPerFat
;
130 USHORT SectorsPerTrack
;
132 ULONG32 HiddenSectors
;
133 ULONG32 LargeSectors
;
134 ULONG32 LargeSectorsPerFat
;
137 USHORT ExtendedFlags
;
142 ULONG MirrorDisabled
:1;
147 ULONG32 RootDirFirstCluster
;
149 USHORT BackupBootSector
;
150 } BIOS_PARAMETER_BLOCK
, *PBIOS_PARAMETER_BLOCK
;
155 #include <pshpack1.h>
168 typedef struct _EXTENT
177 EXTENT MainVolumeDescriptorExtent
;
178 EXTENT ReserveVolumeDescriptorExtent
;
185 typedef enum _FILE_SYSTEM_TYPE
193 } FILE_SYSTEM_TYPE
, *PFILE_SYSTEM_TYPE
;
196 // FS Recognizer State
198 typedef enum _FS_REC_STATE
203 } FS_REC_STATE
, *PFS_REC_STATE
;
208 typedef struct _DEVICE_EXTENSION
211 FILE_SYSTEM_TYPE FsType
;
212 PDEVICE_OBJECT Alternate
;
213 } DEVICE_EXTENSION
, *PDEVICE_EXTENSION
;
221 IN PDEVICE_OBJECT DeviceObject
,
228 IN PDEVICE_OBJECT DeviceObject
,
235 IN PDEVICE_OBJECT DeviceObject
,
242 IN PDEVICE_OBJECT DeviceObject
,
249 IN PDEVICE_OBJECT DeviceObject
,
255 FsRecGetDeviceSectors(
256 IN PDEVICE_OBJECT DeviceObject
,
258 OUT PLARGE_INTEGER SectorCount
263 FsRecGetDeviceSectorSize(
264 IN PDEVICE_OBJECT DeviceObject
,
265 OUT PULONG SectorSize
271 IN PDEVICE_OBJECT DeviceObject
,
272 IN PLARGE_INTEGER Offset
,
275 IN OUT PVOID
*Buffer
,
276 OUT PBOOLEAN DeviceError OPTIONAL
282 IN PDEVICE_OBJECT DeviceObject
,
283 IN PWCHAR DriverServiceName