ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

fs_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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.