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 */
24 #define ROUND_UP(n, align) \
25 ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
27 #define ROUND_DOWN(n, align) \
28 (((ULONG)n) & ~((align) - 1l))
31 /* Conversion types and macros taken from internal ntifs headers */
41 USHORT ForceAlignment
;
50 #define CopyUchar1(Dst,Src) { \
51 *((UCHAR1 *)(Dst)) = *((UNALIGNED UCHAR1 *)(Src)); \
54 #define CopyUchar2(Dst,Src) { \
55 *((UCHAR2 *)(Dst)) = *((UNALIGNED UCHAR2 *)(Src)); \
58 #define CopyUchar4(Dst,Src) { \
59 *((UCHAR4 *)(Dst)) = *((UNALIGNED UCHAR4 *)(Src)); \
62 #define FatUnpackBios(Bios,Pbios) { \
63 CopyUchar2(&(Bios)->BytesPerSector, &(Pbios)->BytesPerSector[0] ); \
64 CopyUchar1(&(Bios)->SectorsPerCluster, &(Pbios)->SectorsPerCluster[0]); \
65 CopyUchar2(&(Bios)->ReservedSectors, &(Pbios)->ReservedSectors[0] ); \
66 CopyUchar1(&(Bios)->Fats, &(Pbios)->Fats[0] ); \
67 CopyUchar2(&(Bios)->RootEntries, &(Pbios)->RootEntries[0] ); \
68 CopyUchar2(&(Bios)->Sectors, &(Pbios)->Sectors[0] ); \
69 CopyUchar1(&(Bios)->Media, &(Pbios)->Media[0] ); \
70 CopyUchar2(&(Bios)->SectorsPerFat, &(Pbios)->SectorsPerFat[0] ); \
71 CopyUchar2(&(Bios)->SectorsPerTrack, &(Pbios)->SectorsPerTrack[0] ); \
72 CopyUchar2(&(Bios)->Heads, &(Pbios)->Heads[0] ); \
73 CopyUchar4(&(Bios)->HiddenSectors, &(Pbios)->HiddenSectors[0] ); \
74 CopyUchar4(&(Bios)->LargeSectors, &(Pbios)->LargeSectors[0] ); \
77 /* Packed versions of the BPB and Boot Sector */
78 typedef struct _PACKED_BIOS_PARAMETER_BLOCK
80 UCHAR BytesPerSector
[2];
81 UCHAR SectorsPerCluster
[1];
82 UCHAR ReservedSectors
[2];
87 UCHAR SectorsPerFat
[2];
88 UCHAR SectorsPerTrack
[2];
90 UCHAR HiddenSectors
[4];
91 UCHAR LargeSectors
[4];
92 } PACKED_BIOS_PARAMETER_BLOCK
, *PPACKED_BIOS_PARAMETER_BLOCK
;
94 typedef struct _PACKED_BOOT_SECTOR
98 PACKED_BIOS_PARAMETER_BLOCK PackedBpb
;
99 UCHAR PhysicalDriveNumber
;
103 UCHAR VolumeLabel
[11];
105 } PACKED_BOOT_SECTOR
, *PPACKED_BOOT_SECTOR
;
107 /* Unpacked version of the BPB */
108 typedef struct BIOS_PARAMETER_BLOCK
110 USHORT BytesPerSector
;
111 UCHAR SectorsPerCluster
;
112 USHORT ReservedSectors
;
117 USHORT SectorsPerFat
;
118 USHORT SectorsPerTrack
;
120 ULONG32 HiddenSectors
;
121 ULONG32 LargeSectors
;
122 ULONG32 LargeSectorsPerFat
;
125 USHORT ExtendedFlags
;
130 ULONG MirrorDisabled
:1;
135 ULONG32 RootDirFirstCluster
;
137 USHORT BackupBootSector
;
138 } BIOS_PARAMETER_BLOCK
, *PBIOS_PARAMETER_BLOCK
;
140 /* UDFS Structures */
141 #include <pshpack1.h>
154 typedef struct _EXTENT
163 EXTENT MainVolumeDescriptorExtent
;
164 EXTENT ReserveVolumeDescriptorExtent
;
168 /* Filesystem Types */
169 typedef enum _FILE_SYSTEM_TYPE
179 } FILE_SYSTEM_TYPE
, *PFILE_SYSTEM_TYPE
;
181 /* FS Recognizer State */
182 typedef enum _FS_REC_STATE
187 } FS_REC_STATE
, *PFS_REC_STATE
;
189 /* Device extension */
190 typedef struct _DEVICE_EXTENSION
193 FILE_SYSTEM_TYPE FsType
;
194 PDEVICE_OBJECT Alternate
;
195 } DEVICE_EXTENSION
, *PDEVICE_EXTENSION
;
201 IN PDEVICE_OBJECT DeviceObject
,
208 IN PDEVICE_OBJECT DeviceObject
,
215 IN PDEVICE_OBJECT DeviceObject
,
222 IN PDEVICE_OBJECT DeviceObject
,
229 IN PDEVICE_OBJECT DeviceObject
,
236 IN PDEVICE_OBJECT DeviceObject
,
242 FsRecReiserfsFsControl(
243 IN PDEVICE_OBJECT DeviceObject
,
249 FsRecGetDeviceSectors(
250 IN PDEVICE_OBJECT DeviceObject
,
252 OUT PLARGE_INTEGER SectorCount
257 FsRecGetDeviceSectorSize(
258 IN PDEVICE_OBJECT DeviceObject
,
259 OUT PULONG SectorSize
265 IN PDEVICE_OBJECT DeviceObject
,
266 IN PLARGE_INTEGER Offset
,
269 IN OUT PVOID
*Buffer
,
270 OUT PBOOLEAN DeviceError OPTIONAL
276 IN PDEVICE_OBJECT DeviceObject
,
277 IN PWCHAR DriverServiceName
280 #endif /* _FS_REC_H */