Author: pschweitzer
Date: Sat Oct 17 22:39:13 2015
New Revision: 69577
URL:
http://svn.reactos.org/svn/reactos?rev=69577&view=rev
Log:
[FS_REC]
Implement ExtX support in FS_REC, this allows it to autoload ext2fs.sys
Starting with this revision, browsing ExtX volumes in ReactOS works without any other
modifications.
Thanks to Peter Hater for his initial work and to Thomas for his reviews
Added:
trunk/reactos/drivers/filesystems/fs_rec/ext2.h (with props)
Modified:
trunk/reactos/drivers/filesystems/fs_rec/ext2.c
Modified: trunk/reactos/drivers/filesystems/fs_rec/ext2.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/fs_rec…
==============================================================================
--- trunk/reactos/drivers/filesystems/fs_rec/ext2.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/filesystems/fs_rec/ext2.c [iso-8859-1] Sat Oct 17 22:39:13 2015
@@ -4,11 +4,13 @@
* FILE: drivers/filesystems/fs_rec/ext2.c
* PURPOSE: EXT2 Recognizer
* PROGRAMMER: Eric Kohl
+ * Pierre Schweitzer (pierre(a)reactos.org)
*/
/* INCLUDES *****************************************************************/
#include "fs_rec.h"
+#include "ext2.h"
#define NDEBUG
#include <debug.h>
@@ -17,11 +19,10 @@
BOOLEAN
NTAPI
-FsRecIsExt2Volume(IN PVOID PackedBootSector)
+FsRecIsExt2Volume(IN PEXT2_SUPER_BLOCK SuperBlock)
{
- UNREFERENCED_PARAMETER(PackedBootSector);
- /* For now, always return failure... */
- return FALSE;
+ /* Just check for magic */
+ return (SuperBlock->Magic == EXT2_SUPER_MAGIC);
}
NTSTATUS
@@ -32,9 +33,9 @@
PIO_STACK_LOCATION Stack;
NTSTATUS Status;
PDEVICE_OBJECT MountDevice;
- PVOID Bpb = NULL;
+ PEXT2_SUPER_BLOCK Spb = NULL;
ULONG SectorSize;
- LARGE_INTEGER Offset = {{0, 0}};
+ LARGE_INTEGER Offset;
BOOLEAN DeviceError = FALSE;
PAGED_CODE();
@@ -51,16 +52,17 @@
MountDevice = Stack->Parameters.MountVolume.DeviceObject;
if (FsRecGetDeviceSectorSize(MountDevice, &SectorSize))
{
- /* Try to read the BPB */
+ /* Try to read the superblock */
+ Offset.QuadPart = 0x400;
if (FsRecReadBlock(MountDevice,
&Offset,
- 512,
+ 0x400,
SectorSize,
- (PVOID)&Bpb,
+ (PVOID)&Spb,
&DeviceError))
{
/* Check if it's an actual EXT2 volume */
- if (FsRecIsExt2Volume(Bpb))
+ if (FsRecIsExt2Volume(Spb))
{
/* It is! */
Status = STATUS_FS_DRIVER_REQUIRED;
@@ -68,7 +70,7 @@
}
/* Free the boot sector if we have one */
- ExFreePool(Bpb);
+ ExFreePool(Spb);
}
else
{
Added: trunk/reactos/drivers/filesystems/fs_rec/ext2.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/fs_rec…
==============================================================================
--- trunk/reactos/drivers/filesystems/fs_rec/ext2.h (added)
+++ trunk/reactos/drivers/filesystems/fs_rec/ext2.h [iso-8859-1] Sat Oct 17 22:39:13 2015
@@ -0,0 +1,46 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS File System Recognizer
+ * FILE: drivers/filesystems/fs_rec/ext2.h
+ * PURPOSE: EXT2 Header File
+ * PROGRAMMER: Pierre Schweitzer (pierre(a)reactos.org)
+ */
+
+#include <pshpack1.h>
+typedef struct _EXT2_SUPER_BLOCK {
+ ULONG InodesCount;
+ ULONG BlocksCount;
+ ULONG ReservedBlocksCount;
+ ULONG FreeBlocksCount;
+ ULONG FreeInodesCount;
+ ULONG FirstDataBlock;
+ ULONG LogBlockSize;
+ LONG LogFragSize;
+ ULONG BlocksPerGroup;
+ ULONG FragsPerGroup;
+ ULONG InodesPerGroup;
+ ULONG MountTime;
+ ULONG WriteTime;
+ USHORT MountCount;
+ SHORT MaxMountCount;
+ USHORT Magic;
+ USHORT State;
+ USHORT Errors;
+ USHORT MinorRevLevel;
+ ULONG LastCheck;
+ ULONG CheckInterval;
+ ULONG CreatorOS;
+ ULONG RevLevel;
+ USHORT DefResUid;
+ USHORT DefResGid;
+ // Partial
+} EXT2_SUPER_BLOCK, *PEXT2_SUPER_BLOCK;
+#include <poppack.h>
+
+C_ASSERT(FIELD_OFFSET(EXT2_SUPER_BLOCK, FreeInodesCount) == 0x10);
+C_ASSERT(FIELD_OFFSET(EXT2_SUPER_BLOCK, BlocksPerGroup) == 0x20);
+C_ASSERT(FIELD_OFFSET(EXT2_SUPER_BLOCK, WriteTime) == 0x30);
+C_ASSERT(FIELD_OFFSET(EXT2_SUPER_BLOCK, LastCheck) == 0x40);
+C_ASSERT(FIELD_OFFSET(EXT2_SUPER_BLOCK, DefResUid) == 0x50);
+
+#define EXT2_SUPER_MAGIC 0xEF53
Propchange: trunk/reactos/drivers/filesystems/fs_rec/ext2.h
------------------------------------------------------------------------------
svn:eol-style = native