Index: src/ch/TLocalFilesystem.cpp =================================================================== diff -u -N -r4be0f47d68a1a161529dc55901659b9daec996e3 -r8a7d1f41ad744b7dbe25e5cee2a99a2300eb2b5c --- src/ch/TLocalFilesystem.cpp (.../TLocalFilesystem.cpp) (revision 4be0f47d68a1a161529dc55901659b9daec996e3) +++ src/ch/TLocalFilesystem.cpp (.../TLocalFilesystem.cpp) (revision 8a7d1f41ad744b7dbe25e5cee2a99a2300eb2b5c) @@ -222,7 +222,13 @@ DWORD dwFirstPhysicalDisk = GetPhysicalDiskNumber(wchFirstDrive); DWORD dwSecondPhysicalDisk = GetPhysicalDiskNumber(wchSecondDrive); if(dwFirstPhysicalDisk == std::numeric_limits::max() || dwSecondPhysicalDisk == std::numeric_limits::max()) - THROW(_T("Problem with physical disk detection"), 0, 0, 0); + { + // NOTE: disabled throwing an exception here - when testing, it came out that some DRIVE_FIXED + // volumes might have problems handling this detection (TrueCrypt volumes for example). + // So for now we report it as two different physical disks. + //THROW(_T("Problem with physical disk detection"), 0, 0, 0); + eRelation = eRelation_TwoPhysicalDisks; + } if(dwFirstPhysicalDisk == dwSecondPhysicalDisk) eRelation = eRelation_SinglePhysicalDisk; @@ -259,7 +265,11 @@ DWORD dwBytesReturned = 0; BOOL bResult = DeviceIoControl(hDevice, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0, pVolumeDiskExtents, stSize, &dwBytesReturned, NULL); if(!bResult) + { + // NOTE: when ERROR_INVALID_FUNCTION is reported here, it probably means that underlying volume + // cannot support IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS properly (such case includes TrueCrypt volumes) return std::numeric_limits::max(); + } CloseHandle(hDevice);