Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenfs_rec.h
Go to the documentation of this file.
00001 /* 00002 * COPYRIGHT: See COPYING in the top level directory 00003 * PROJECT: ReactOS File System Recognizer 00004 * FILE: drivers/filesystems/fs_rec/fs_rec.h 00005 * PURPOSE: Main Header File 00006 * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org) 00007 * Eric Kohl 00008 */ 00009 00010 // 00011 // IFS Headers 00012 // 00013 #include <ntifs.h> 00014 #include <ntdddisk.h> 00015 #include <ntddcdrm.h> 00016 00017 // 00018 // Tag for memory allocations 00019 // 00020 #define FSREC_TAG 'cRsF' 00021 00022 // 00023 // UDFS Offsets 00024 // 00025 #define UDFS_VRS_START_OFFSET 32768 00026 #define UDFS_AVDP_SECTOR 256 00027 00028 // 00029 // Non-standard rounding macros 00030 // 00031 #define ROUND_UP(n, align) \ 00032 ROUND_DOWN(((ULONG)n) + (align) - 1, (align)) 00033 00034 #define ROUND_DOWN(n, align) \ 00035 (((ULONG)n) & ~((align) - 1l)) 00036 00037 // 00038 // Conversion types and macros taken from internal ntifs headers 00039 // 00040 typedef union _UCHAR1 00041 { 00042 UCHAR Uchar[1]; 00043 UCHAR ForceAlignment; 00044 } UCHAR1, *PUCHAR1; 00045 00046 typedef union _UCHAR2 00047 { 00048 UCHAR Uchar[2]; 00049 USHORT ForceAlignment; 00050 } UCHAR2, *PUCHAR2; 00051 00052 typedef union _UCHAR4 00053 { 00054 UCHAR Uchar[4]; 00055 ULONG ForceAlignment; 00056 } UCHAR4, *PUCHAR4; 00057 00058 #define CopyUchar1(Dst,Src) { \ 00059 *((UCHAR1 *)(Dst)) = *((UNALIGNED UCHAR1 *)(Src)); \ 00060 } 00061 00062 #define CopyUchar2(Dst,Src) { \ 00063 *((UCHAR2 *)(Dst)) = *((UNALIGNED UCHAR2 *)(Src)); \ 00064 } 00065 00066 #define CopyUchar4(Dst,Src) { \ 00067 *((UCHAR4 *)(Dst)) = *((UNALIGNED UCHAR4 *)(Src)); \ 00068 } 00069 00070 #define FatUnpackBios(Bios,Pbios) { \ 00071 CopyUchar2(&(Bios)->BytesPerSector, &(Pbios)->BytesPerSector[0] ); \ 00072 CopyUchar1(&(Bios)->SectorsPerCluster, &(Pbios)->SectorsPerCluster[0]); \ 00073 CopyUchar2(&(Bios)->ReservedSectors, &(Pbios)->ReservedSectors[0] ); \ 00074 CopyUchar1(&(Bios)->Fats, &(Pbios)->Fats[0] ); \ 00075 CopyUchar2(&(Bios)->RootEntries, &(Pbios)->RootEntries[0] ); \ 00076 CopyUchar2(&(Bios)->Sectors, &(Pbios)->Sectors[0] ); \ 00077 CopyUchar1(&(Bios)->Media, &(Pbios)->Media[0] ); \ 00078 CopyUchar2(&(Bios)->SectorsPerFat, &(Pbios)->SectorsPerFat[0] ); \ 00079 CopyUchar2(&(Bios)->SectorsPerTrack, &(Pbios)->SectorsPerTrack[0] ); \ 00080 CopyUchar2(&(Bios)->Heads, &(Pbios)->Heads[0] ); \ 00081 CopyUchar4(&(Bios)->HiddenSectors, &(Pbios)->HiddenSectors[0] ); \ 00082 CopyUchar4(&(Bios)->LargeSectors, &(Pbios)->LargeSectors[0] ); \ 00083 } 00084 00085 // 00086 // Packed versions of the BPB and Boot Sector 00087 // 00088 typedef struct _PACKED_BIOS_PARAMETER_BLOCK 00089 { 00090 UCHAR BytesPerSector[2]; 00091 UCHAR SectorsPerCluster[1]; 00092 UCHAR ReservedSectors[2]; 00093 UCHAR Fats[1]; 00094 UCHAR RootEntries[2]; 00095 UCHAR Sectors[2]; 00096 UCHAR Media[1]; 00097 UCHAR SectorsPerFat[2]; 00098 UCHAR SectorsPerTrack[2]; 00099 UCHAR Heads[2]; 00100 UCHAR HiddenSectors[4]; 00101 UCHAR LargeSectors[4]; 00102 } PACKED_BIOS_PARAMETER_BLOCK, *PPACKED_BIOS_PARAMETER_BLOCK; 00103 00104 typedef struct _PACKED_BOOT_SECTOR 00105 { 00106 UCHAR Jump[3]; 00107 UCHAR Oem[8]; 00108 PACKED_BIOS_PARAMETER_BLOCK PackedBpb; 00109 UCHAR PhysicalDriveNumber; 00110 UCHAR CurrentHead; 00111 UCHAR Signature; 00112 UCHAR Id[4]; 00113 UCHAR VolumeLabel[11]; 00114 UCHAR SystemId[8]; 00115 } PACKED_BOOT_SECTOR, *PPACKED_BOOT_SECTOR; 00116 00117 // 00118 // Unpacked version of the BPB 00119 // 00120 typedef struct BIOS_PARAMETER_BLOCK 00121 { 00122 USHORT BytesPerSector; 00123 UCHAR SectorsPerCluster; 00124 USHORT ReservedSectors; 00125 UCHAR Fats; 00126 USHORT RootEntries; 00127 USHORT Sectors; 00128 UCHAR Media; 00129 USHORT SectorsPerFat; 00130 USHORT SectorsPerTrack; 00131 USHORT Heads; 00132 ULONG32 HiddenSectors; 00133 ULONG32 LargeSectors; 00134 ULONG32 LargeSectorsPerFat; 00135 union 00136 { 00137 USHORT ExtendedFlags; 00138 struct 00139 { 00140 ULONG ActiveFat:4; 00141 ULONG Reserved0:3; 00142 ULONG MirrorDisabled:1; 00143 ULONG Reserved1:8; 00144 }; 00145 }; 00146 USHORT FsVersion; 00147 ULONG32 RootDirFirstCluster; 00148 USHORT FsInfoSector; 00149 USHORT BackupBootSector; 00150 } BIOS_PARAMETER_BLOCK, *PBIOS_PARAMETER_BLOCK; 00151 00152 // 00153 // UDFS Structures 00154 // 00155 #include <pshpack1.h> 00156 typedef struct _TAG 00157 { 00158 USHORT Identifier; 00159 USHORT Version; 00160 UCHAR Checksum; 00161 UCHAR Reserved; 00162 USHORT SerialNumber; 00163 USHORT Crc; 00164 USHORT CrcLength; 00165 ULONG Location; 00166 } TAG, *PTAG; 00167 00168 typedef struct _EXTENT 00169 { 00170 ULONG Length; 00171 ULONG Location; 00172 } EXTENT, *PEXTENT; 00173 00174 typedef struct _AVDP 00175 { 00176 TAG DescriptorTag; 00177 EXTENT MainVolumeDescriptorExtent; 00178 EXTENT ReserveVolumeDescriptorExtent; 00179 } AVDP, *PAVDP; 00180 #include <poppack.h> 00181 00182 // 00183 // Filesystem Types 00184 // 00185 typedef enum _FILE_SYSTEM_TYPE 00186 { 00187 FS_TYPE_UNUSED, 00188 FS_TYPE_VFAT, 00189 FS_TYPE_NTFS, 00190 FS_TYPE_CDFS, 00191 FS_TYPE_UDFS, 00192 FS_TYPE_EXT2, 00193 } FILE_SYSTEM_TYPE, *PFILE_SYSTEM_TYPE; 00194 00195 // 00196 // FS Recognizer State 00197 // 00198 typedef enum _FS_REC_STATE 00199 { 00200 Pending, 00201 Loaded, 00202 Unloading 00203 } FS_REC_STATE, *PFS_REC_STATE; 00204 00205 // 00206 // Device extension 00207 // 00208 typedef struct _DEVICE_EXTENSION 00209 { 00210 FS_REC_STATE State; 00211 FILE_SYSTEM_TYPE FsType; 00212 PDEVICE_OBJECT Alternate; 00213 } DEVICE_EXTENSION, *PDEVICE_EXTENSION; 00214 00215 // 00216 // Prototypes 00217 // 00218 NTSTATUS 00219 NTAPI 00220 FsRecCdfsFsControl( 00221 IN PDEVICE_OBJECT DeviceObject, 00222 IN PIRP Irp 00223 ); 00224 00225 NTSTATUS 00226 NTAPI 00227 FsRecVfatFsControl( 00228 IN PDEVICE_OBJECT DeviceObject, 00229 IN PIRP Irp 00230 ); 00231 00232 NTSTATUS 00233 NTAPI 00234 FsRecNtfsFsControl( 00235 IN PDEVICE_OBJECT DeviceObject, 00236 IN PIRP Irp 00237 ); 00238 00239 NTSTATUS 00240 NTAPI 00241 FsRecUdfsFsControl( 00242 IN PDEVICE_OBJECT DeviceObject, 00243 IN PIRP Irp 00244 ); 00245 00246 NTSTATUS 00247 NTAPI 00248 FsRecExt2FsControl( 00249 IN PDEVICE_OBJECT DeviceObject, 00250 IN PIRP Irp 00251 ); 00252 00253 BOOLEAN 00254 NTAPI 00255 FsRecGetDeviceSectors( 00256 IN PDEVICE_OBJECT DeviceObject, 00257 IN ULONG SectorSize, 00258 OUT PLARGE_INTEGER SectorCount 00259 ); 00260 00261 BOOLEAN 00262 NTAPI 00263 FsRecGetDeviceSectorSize( 00264 IN PDEVICE_OBJECT DeviceObject, 00265 OUT PULONG SectorSize 00266 ); 00267 00268 BOOLEAN 00269 NTAPI 00270 FsRecReadBlock( 00271 IN PDEVICE_OBJECT DeviceObject, 00272 IN PLARGE_INTEGER Offset, 00273 IN ULONG Length, 00274 IN ULONG SectorSize, 00275 IN OUT PVOID *Buffer, 00276 OUT PBOOLEAN DeviceError OPTIONAL 00277 ); 00278 00279 NTSTATUS 00280 NTAPI 00281 FsRecLoadFileSystem( 00282 IN PDEVICE_OBJECT DeviceObject, 00283 IN PWCHAR DriverServiceName 00284 ); Generated on Thu May 24 2012 04:28:15 for ReactOS by
1.7.6.1
|