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)
15 /* Tag for memory allocations */
16 #define FSREC_TAG 'cRsF'
19 #define UDFS_VRS_START_OFFSET 32768
20 #define UDFS_AVDP_SECTOR 256
22 /* Non-standard rounding macros */
23 #define ROUND_UP(n, align) \
24 ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
26 #define ROUND_DOWN(n, align) \
27 (((ULONG)n) & ~((align) - 1l))
29 /* Conversion types and macros taken from internal ntifs headers */
39 USHORT ForceAlignment
;
48 #define CopyUchar1(Dst,Src) { \
49 *((UCHAR1 *)(Dst)) = *((UNALIGNED UCHAR1 *)(Src)); \
52 #define CopyUchar2(Dst,Src) { \
53 *((UCHAR2 *)(Dst)) = *((UNALIGNED UCHAR2 *)(Src)); \
56 #define CopyUchar4(Dst,Src) { \
57 *((UCHAR4 *)(Dst)) = *((UNALIGNED UCHAR4 *)(Src)); \
60 #define FatUnpackBios(Bios,Pbios) { \
61 CopyUchar2(&(Bios)->BytesPerSector, &(Pbios)->BytesPerSector[0] ); \
62 CopyUchar1(&(Bios)->SectorsPerCluster, &(Pbios)->SectorsPerCluster[0]); \
63 CopyUchar2(&(Bios)->ReservedSectors, &(Pbios)->ReservedSectors[0] ); \
64 CopyUchar1(&(Bios)->Fats, &(Pbios)->Fats[0] ); \
65 CopyUchar2(&(Bios)->RootEntries, &(Pbios)->RootEntries[0] ); \
66 CopyUchar2(&(Bios)->Sectors, &(Pbios)->Sectors[0] ); \
67 CopyUchar1(&(Bios)->Media, &(Pbios)->Media[0] ); \
68 CopyUchar2(&(Bios)->SectorsPerFat, &(Pbios)->SectorsPerFat[0] ); \
69 CopyUchar2(&(Bios)->SectorsPerTrack, &(Pbios)->SectorsPerTrack[0] ); \
70 CopyUchar2(&(Bios)->Heads, &(Pbios)->Heads[0] ); \
71 CopyUchar4(&(Bios)->HiddenSectors, &(Pbios)->HiddenSectors[0] ); \
72 CopyUchar4(&(Bios)->LargeSectors, &(Pbios)->LargeSectors[0] ); \
75 /* Packed versions of the BPB and Boot Sector */
76 typedef struct _PACKED_BIOS_PARAMETER_BLOCK
78 UCHAR BytesPerSector
[2];
79 UCHAR SectorsPerCluster
[1];
80 UCHAR ReservedSectors
[2];
85 UCHAR SectorsPerFat
[2];
86 UCHAR SectorsPerTrack
[2];
88 UCHAR HiddenSectors
[4];
89 UCHAR LargeSectors
[4];
90 } PACKED_BIOS_PARAMETER_BLOCK
, *PPACKED_BIOS_PARAMETER_BLOCK
;
92 typedef struct _PACKED_BOOT_SECTOR
96 PACKED_BIOS_PARAMETER_BLOCK PackedBpb
;
97 UCHAR PhysicalDriveNumber
;
101 UCHAR VolumeLabel
[11];
103 } PACKED_BOOT_SECTOR
, *PPACKED_BOOT_SECTOR
;
105 /* Unpacked version of the BPB */
106 typedef struct BIOS_PARAMETER_BLOCK
108 USHORT BytesPerSector
;
109 UCHAR SectorsPerCluster
;
110 USHORT ReservedSectors
;
115 USHORT SectorsPerFat
;
116 USHORT SectorsPerTrack
;
118 ULONG32 HiddenSectors
;
119 ULONG32 LargeSectors
;
120 ULONG32 LargeSectorsPerFat
;
123 USHORT ExtendedFlags
;
128 ULONG MirrorDisabled
:1;
133 ULONG32 RootDirFirstCluster
;
135 USHORT BackupBootSector
;
136 } BIOS_PARAMETER_BLOCK
, *PBIOS_PARAMETER_BLOCK
;
138 /* UDFS Structures */
139 #include <pshpack1.h>
152 typedef struct _EXTENT
161 EXTENT MainVolumeDescriptorExtent
;
162 EXTENT ReserveVolumeDescriptorExtent
;
166 /* Filesystem Types */
167 typedef enum _FILE_SYSTEM_TYPE
175 } FILE_SYSTEM_TYPE
, *PFILE_SYSTEM_TYPE
;
177 /* FS Recognizer State */
178 typedef enum _FS_REC_STATE
183 } FS_REC_STATE
, *PFS_REC_STATE
;
185 /* Device extension */
186 typedef struct _DEVICE_EXTENSION
189 FILE_SYSTEM_TYPE FsType
;
190 PDEVICE_OBJECT Alternate
;
191 } DEVICE_EXTENSION
, *PDEVICE_EXTENSION
;
197 IN PDEVICE_OBJECT DeviceObject
,
204 IN PDEVICE_OBJECT DeviceObject
,
211 IN PDEVICE_OBJECT DeviceObject
,
218 IN PDEVICE_OBJECT DeviceObject
,
225 IN PDEVICE_OBJECT DeviceObject
,
231 FsRecGetDeviceSectors(
232 IN PDEVICE_OBJECT DeviceObject
,
234 OUT PLARGE_INTEGER SectorCount
239 FsRecGetDeviceSectorSize(
240 IN PDEVICE_OBJECT DeviceObject
,
241 OUT PULONG SectorSize
247 IN PDEVICE_OBJECT DeviceObject
,
248 IN PLARGE_INTEGER Offset
,
251 IN OUT PVOID
*Buffer
,
252 OUT PBOOLEAN DeviceError OPTIONAL
258 IN PDEVICE_OBJECT DeviceObject
,
259 IN PWCHAR DriverServiceName
262 #endif /* _FS_REC_H */