* FILE: services/fs/ext2/super.c
* PURPOSE: ext2 filesystem
* PROGRAMMER: David Welch (welch@mcmail.com)
- * UPDATE HISTORY:
+ * UPDATE HISTORY:
*/
/* INCLUDES *****************************************************************/
PDEVICE_EXTENSION DeviceExtension;
NTSTATUS Status;
PEXT2_FCB Fcb;
-
+
DbgPrint("Ext2Close(DeviceObject %x, Irp %x)\n",DeviceObject,Irp);
-
+
Stack = IoGetCurrentIrpStackLocation(Irp);
FileObject = Stack->FileObject;
DeviceExtension = DeviceObject->DeviceExtension;
-
+
if (FileObject == DeviceExtension->FileObject)
{
Status = STATUS_SUCCESS;
-
+
Irp->IoStatus.Status = Status;
Irp->IoStatus.Information = 0;
-
+
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return(Status);
}
ExFreePool(Fcb);
FileObject->FsContext = NULL;
}
-
+
Status = STATUS_SUCCESS;
-
+
Irp->IoStatus.Status = Status;
Irp->IoStatus.Information = 0;
-
+
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return(Status);
}
{
PDEVICE_OBJECT DeviceObject;
PDEVICE_EXTENSION DeviceExt;
- PVOID BlockBuffer;
+ PVOID BlockBuffer;
struct ext2_super_block* superblock;
-
+
DPRINT("Ext2Mount(DeviceToMount %x)\n",DeviceToMount);
-
+
BlockBuffer = ExAllocatePool(NonPagedPool,BLOCKSIZE);
Ext2ReadSectors(DeviceToMount,
1,
1,
BlockBuffer);
superblock = BlockBuffer;
-
+
if (superblock->s_magic != EXT2_SUPER_MAGIC)
{
ExFreePool(BlockBuffer);
DPRINT("Volume recognized\n");
DPRINT("s_inodes_count %d\n",superblock->s_inodes_count);
DPRINT("s_blocks_count %d\n",superblock->s_blocks_count);
-
+
IoCreateDevice(DriverObject,
sizeof(DEVICE_EXTENSION),
NULL,
CcRosInitializeFileCache(DeviceExt->FileObject,
&DeviceExt->Bcb,
PAGE_SIZE * 3);
-
+
DPRINT("Ext2Mount() = STATUS_SUCCESS\n");
-
+
return(STATUS_SUCCESS);
}
PVPB vpb = Stack->Parameters.Mount.Vpb;
PDEVICE_OBJECT DeviceToMount = Stack->Parameters.Mount.DeviceObject;
NTSTATUS Status;
-
+
Status = Ext2Mount(DeviceToMount);
-
+
Irp->IoStatus.Status = Status;
Irp->IoStatus.Information = 0;
-
+
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return(Status);
}
PDEVICE_OBJECT DeviceObject;
NTSTATUS ret;
UNICODE_STRING DeviceName = ROS_STRING_INITIALIZER(L"\\Device\\Ext2Fsd");
-
+
DbgPrint("Ext2 FSD 0.0.1\n");
-
+
DriverObject = _DriverObject;
-
+
ret = IoCreateDevice(DriverObject,
0,
&DeviceName,
Ext2FileSystemControl;
DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] =
Ext2DirectoryControl;
- DriverObject->MajorFunction[IRP_MJ_QUERY_INFORMATION] =
+ DriverObject->MajorFunction[IRP_MJ_QUERY_INFORMATION] =
Ext2QueryInformation;
DriverObject->MajorFunction[IRP_MJ_SET_INFORMATION] = Ext2SetInformation;
DriverObject->MajorFunction[IRP_MJ_FLUSH_BUFFERS] = Ext2FlushBuffers;
DriverObject->MajorFunction[IRP_MJ_SET_SECURITY] = Ext2SetSecurity;
DriverObject->MajorFunction[IRP_MJ_QUERY_QUOTA] = Ext2QueryQuota;
DriverObject->MajorFunction[IRP_MJ_SET_QUOTA] = Ext2SetQuota;
-
+
DriverObject->DriverUnload = NULL;
-
+
IoRegisterFileSystem(DeviceObject);
-
+
return(STATUS_SUCCESS);
}