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
180 } FILE_SYSTEM_TYPE
, *PFILE_SYSTEM_TYPE
;
182 /* FS Recognizer State */
183 typedef enum _FS_REC_STATE
188 } FS_REC_STATE
, *PFS_REC_STATE
;
190 /* Device extension */
191 typedef struct _DEVICE_EXTENSION
194 FILE_SYSTEM_TYPE FsType
;
195 PDEVICE_OBJECT Alternate
;
196 } DEVICE_EXTENSION
, *PDEVICE_EXTENSION
;
202 IN PDEVICE_OBJECT DeviceObject
,
209 IN PDEVICE_OBJECT DeviceObject
,
216 IN PDEVICE_OBJECT DeviceObject
,
223 IN PDEVICE_OBJECT DeviceObject
,
230 IN PDEVICE_OBJECT DeviceObject
,
237 IN PDEVICE_OBJECT DeviceObject
,
243 FsRecReiserfsFsControl(
244 IN PDEVICE_OBJECT DeviceObject
,
251 IN PDEVICE_OBJECT DeviceObject
,
257 FsRecGetDeviceSectors(
258 IN PDEVICE_OBJECT DeviceObject
,
260 OUT PLARGE_INTEGER SectorCount
265 FsRecGetDeviceSectorSize(
266 IN PDEVICE_OBJECT DeviceObject
,
267 OUT PULONG SectorSize
273 IN PDEVICE_OBJECT DeviceObject
,
274 IN PLARGE_INTEGER Offset
,
277 IN OUT PVOID
*Buffer
,
278 OUT PBOOLEAN DeviceError OPTIONAL
284 IN PDEVICE_OBJECT DeviceObject
,
285 IN PWCHAR DriverServiceName
288 #endif /* _FS_REC_H */