MCPcopy Create free account
hub / github.com/bobranten/Ext4Fsd / Ext2MountVolume

Function Ext2MountVolume

Ext4Fsd/fsctl.c:2047–2276  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2045}
2046
2047NTSTATUS
2048Ext2MountVolume (IN PEXT2_IRP_CONTEXT IrpContext)
2049{
2050 PDEVICE_OBJECT MainDeviceObject;
2051 BOOLEAN GlobalDataResourceAcquired = FALSE;
2052 PIRP Irp;
2053 PIO_STACK_LOCATION IoStackLocation;
2054 PDEVICE_OBJECT TargetDeviceObject;
2055 NTSTATUS Status = STATUS_UNRECOGNIZED_VOLUME;
2056 PDEVICE_OBJECT VolumeDeviceObject = NULL;
2057 PEXT2_VCB Vcb = NULL, OldVcb = NULL;
2058 PVPB OldVpb = NULL, Vpb = NULL;
2059 PEXT2_SUPER_BLOCK Ext2Sb = NULL;
2060 ULONG dwBytes;
2061 DISK_GEOMETRY DiskGeometry;
2062
2063 __try {
2064
2065 ASSERT(IrpContext != NULL);
2066 ASSERT((IrpContext->Identifier.Type == EXT2ICX) &&
2067 (IrpContext->Identifier.Size == sizeof(EXT2_IRP_CONTEXT)));
2068
2069 MainDeviceObject = IrpContext->DeviceObject;
2070
2071 //
2072 // Make sure we can wait.
2073 //
2074
2075 SetFlag(IrpContext->Flags, IRP_CONTEXT_FLAG_WAIT);
2076
2077 //
2078 // This request is only allowed on the main device object
2079 //
2080 if (!IsExt2FsDevice(MainDeviceObject)) {
2081 Status = STATUS_INVALID_DEVICE_REQUEST;
2082 __leave;
2083 }
2084
2085 if (IsFlagOn(Ext2Global->Flags, EXT2_UNLOAD_PENDING)) {
2086 Status = STATUS_UNRECOGNIZED_VOLUME;
2087 __leave;
2088 }
2089
2090#if 0
2091 if (IrpContext->RealDevice->Size >= sizeof(ULONG) + sizeof(DEVICE_OBJECT) &&
2092 *((PULONG)IrpContext->RealDevice->DeviceExtension) == 'DSSA') {
2093 } else {
2094 Status = STATUS_UNRECOGNIZED_VOLUME;
2095 __leave;
2096 }
2097#endif
2098
2099 Irp = IrpContext->Irp;
2100 IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
2101 TargetDeviceObject =
2102 IoStackLocation->Parameters.MountVolume.DeviceObject;
2103
2104 dwBytes = sizeof(DISK_GEOMETRY);

Callers 1

Ext2FileSystemControlFunction · 0.70

Calls 8

Ext2DiskIoControlFunction · 0.85
Ext2LoadSuperFunction · 0.85
Ext2InitializeVcbFunction · 0.85
Ext2InsertVcbFunction · 0.85
Ext2DestroyVcbFunction · 0.85
Ext2FreePoolFunction · 0.85
Ext2CompleteIrpContextFunction · 0.85

Tested by

no test coverage detected