| 2045 | } |
| 2046 | |
| 2047 | NTSTATUS |
| 2048 | Ext2MountVolume (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); |
no test coverage detected