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)
12 /* Tag for memory allocations */
13 #define FSREC_TAG 'cRsF'
16 #define UDFS_VRS_START_OFFSET 32768
17 #define UDFS_AVDP_SECTOR 256
19 /* Non-standard rounding macros */
20 #define ROUND_UP(n, align) \
21 ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
23 #define ROUND_DOWN(n, align) \
24 (((ULONG)n) & ~((align) - 1l))
26 /* Conversion types and macros taken from internal ntifs headers */
36 USHORT ForceAlignment
;
45 #define CopyUchar1(Dst,Src) { \
46 *((UCHAR1 *)(Dst)) = *((UNALIGNED UCHAR1 *)(Src)); \
49 #define CopyUchar2(Dst,Src) { \
50 *((UCHAR2 *)(Dst)) = *((UNALIGNED UCHAR2 *)(Src)); \
53 #define CopyUchar4(Dst,Src) { \
54 *((UCHAR4 *)(Dst)) = *((UNALIGNED UCHAR4 *)(Src)); \
57 #define FatUnpackBios(Bios,Pbios) { \
58 CopyUchar2(&(Bios)->BytesPerSector, &(Pbios)->BytesPerSector[0] ); \
59 CopyUchar1(&(Bios)->SectorsPerCluster, &(Pbios)->SectorsPerCluster[0]); \
60 CopyUchar2(&(Bios)->ReservedSectors, &(Pbios)->ReservedSectors[0] ); \
61 CopyUchar1(&(Bios)->Fats, &(Pbios)->Fats[0] ); \
62 CopyUchar2(&(Bios)->RootEntries, &(Pbios)->RootEntries[0] ); \
63 CopyUchar2(&(Bios)->Sectors, &(Pbios)->Sectors[0] ); \
64 CopyUchar1(&(Bios)->Media, &(Pbios)->Media[0] ); \
65 CopyUchar2(&(Bios)->SectorsPerFat, &(Pbios)->SectorsPerFat[0] ); \
66 CopyUchar2(&(Bios)->SectorsPerTrack, &(Pbios)->SectorsPerTrack[0] ); \
67 CopyUchar2(&(Bios)->Heads, &(Pbios)->Heads[0] ); \
68 CopyUchar4(&(Bios)->HiddenSectors, &(Pbios)->HiddenSectors[0] ); \
69 CopyUchar4(&(Bios)->LargeSectors, &(Pbios)->LargeSectors[0] ); \
72 /* Packed versions of the BPB and Boot Sector */
73 typedef struct _PACKED_BIOS_PARAMETER_BLOCK
75 UCHAR BytesPerSector
[2];
76 UCHAR SectorsPerCluster
[1];
77 UCHAR ReservedSectors
[2];
82 UCHAR SectorsPerFat
[2];
83 UCHAR SectorsPerTrack
[2];
85 UCHAR HiddenSectors
[4];
86 UCHAR LargeSectors
[4];
87 } PACKED_BIOS_PARAMETER_BLOCK
, *PPACKED_BIOS_PARAMETER_BLOCK
;
89 typedef struct _PACKED_BOOT_SECTOR
93 PACKED_BIOS_PARAMETER_BLOCK PackedBpb
;
94 UCHAR PhysicalDriveNumber
;
98 UCHAR VolumeLabel
[11];
100 } PACKED_BOOT_SECTOR
, *PPACKED_BOOT_SECTOR
;
102 /* Unpacked version of the BPB */
103 typedef struct BIOS_PARAMETER_BLOCK
105 USHORT BytesPerSector
;
106 UCHAR SectorsPerCluster
;
107 USHORT ReservedSectors
;
112 USHORT SectorsPerFat
;
113 USHORT SectorsPerTrack
;
115 ULONG32 HiddenSectors
;
116 ULONG32 LargeSectors
;
117 ULONG32 LargeSectorsPerFat
;
120 USHORT ExtendedFlags
;
125 ULONG MirrorDisabled
:1;
130 ULONG32 RootDirFirstCluster
;
132 USHORT BackupBootSector
;
133 } BIOS_PARAMETER_BLOCK
, *PBIOS_PARAMETER_BLOCK
;
135 /* UDFS Structures */
136 #include <pshpack1.h>
149 typedef struct _EXTENT
158 EXTENT MainVolumeDescriptorExtent
;
159 EXTENT ReserveVolumeDescriptorExtent
;
163 /* Filesystem Types */
164 typedef enum _FILE_SYSTEM_TYPE
172 } FILE_SYSTEM_TYPE
, *PFILE_SYSTEM_TYPE
;
174 /* FS Recognizer State */
175 typedef enum _FS_REC_STATE
180 } FS_REC_STATE
, *PFS_REC_STATE
;
182 /* Device extension */
183 typedef struct _DEVICE_EXTENSION
186 FILE_SYSTEM_TYPE FsType
;
187 PDEVICE_OBJECT Alternate
;
188 } DEVICE_EXTENSION
, *PDEVICE_EXTENSION
;
194 IN PDEVICE_OBJECT DeviceObject
,
201 IN PDEVICE_OBJECT DeviceObject
,
208 IN PDEVICE_OBJECT DeviceObject
,
215 IN PDEVICE_OBJECT DeviceObject
,
222 IN PDEVICE_OBJECT DeviceObject
,
228 FsRecGetDeviceSectors(
229 IN PDEVICE_OBJECT DeviceObject
,
231 OUT PLARGE_INTEGER SectorCount
236 FsRecGetDeviceSectorSize(
237 IN PDEVICE_OBJECT DeviceObject
,
238 OUT PULONG SectorSize
244 IN PDEVICE_OBJECT DeviceObject
,
245 IN PLARGE_INTEGER Offset
,
248 IN OUT PVOID
*Buffer
,
249 OUT PBOOLEAN DeviceError OPTIONAL
255 IN PDEVICE_OBJECT DeviceObject
,
256 IN PWCHAR DriverServiceName