[TC 8.0 B22 x32] Win8 Hardlink bug

Bug reports will be moved here when the described bug has been fixed

Moderators: white, Hacker, petermad, Stefan2

User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 48021
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

I did add code to handle this, but I can't test it because I don't know how to create such links. What tool do I need?

Btw, are you sure that these paths start with \\?\Volume{ and not just Volume{ ???
Author of Total Commander
https://www.ghisler.com
User avatar
Flint
Power Member
Power Member
Posts: 3487
Joined: 2003-10-27, 09:25 UTC
Location: Antalya, Turkey
Contact:

Post by *Flint »

ghisler(Author) wrote:I did add code to handle this, but I can't test it because I don't know how to create such links. What tool do I need?
mounvol would do, I tested using it (present in Win8 by default).
ghisler(Author) wrote:Btw, are you sure that these paths start with \\?\Volume{ and not just Volume{ ???
I did not check what API functions return for these mount points, but my NL_Info plugin recognizes and translates them into hard disk letter correctly.

A couple of outputs:

Code: Select all

C:\Temp>dir
 Volume in drive C has no label.
 Volume Serial Number is 9048-DEBD

 Directory of C:\Temp

17.04.2012  15:16    <DIR>          .
17.04.2012  15:16    <DIR>          ..
17.04.2012  14:57    <JUNCTION>     Mnt [\??\Volume{352921ce-886e-11e1-a103-806e6f6e6963}\]
17.04.2012  15:01    <JUNCTION>     TotalCmd [c:\Program Files\TotalCmd]
17.04.2012  15:16    <SYMLINKD>     TotalCmd-s [c:\Program Files\TotalCmd]
               0 File(s)              0 bytes
               5 Dir(s)  14 927 192 064 bytes free

C:\Temp>mountvol
Creates, deletes, or lists a volume mount point.

MOUNTVOL [drive:]path VolumeName
MOUNTVOL [drive:]path /D
MOUNTVOL [drive:]path /L
MOUNTVOL [drive:]path /P
MOUNTVOL /R
MOUNTVOL /N
MOUNTVOL /E

    path        Specifies the existing NTFS directory where the mount
                point will reside.
    VolumeName  Specifies the volume name that is the target of the mount
                point.
    /D          Removes the volume mount point from the specified directory.
    /L          Lists the mounted volume name for the specified directory.
    /P          Removes the volume mount point from the specified directory,
                dismounts the volume, and makes the volume not mountable.
                You can make the volume mountable again by creating a volume
                mount point.
    /R          Removes volume mount point directories and registry settings
                for volumes that are no longer in the system.
    /N          Disables automatic mounting of new volumes.
    /E          Re-enables automatic mounting of new volumes.

Possible values for VolumeName along with current mount points are:

    \\?\Volume{352921cd-886e-11e1-a103-806e6f6e6963}\
        *** NO MOUNT POINTS ***

    \\?\Volume{352921ce-886e-11e1-a103-806e6f6e6963}\
        C:\
        C:\Temp\Mnt\

    \\?\Volume{352921d2-886e-11e1-a103-806e6f6e6963}\
        D:\
And a screenshot of how NL_Info and NTLinks detect the mount point:
http://flint-inc.ru/Temp/tcbeta80/win8_mntpoint_info.png
(Please, disregard the junction and symlink to TotalCmd folder, they were for a different test.)
Flint's Homepage: Full TC Russification Package, VirtualDisk, NTFS Links, NoClose Replacer, and other stuff!
 
Using TC 10.52 / Win10 x64
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 48021
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

OK, the problem seems to be that I was checking for '\\?\Volume{', but the stored value is actually '\??\Volume{' with TWO question marks, but just one backslash! And that although I used the command
mountvol c:\path \\?\Volume{352921d2-886e-11e1-a103-806e6f6e6963}

with just ONE question mark. I will therefore have to check for '\??\Volume{' and not for '\\?\Volume{'...
Author of Total Commander
https://www.ghisler.com
User avatar
Flint
Power Member
Power Member
Posts: 3487
Joined: 2003-10-27, 09:25 UTC
Location: Antalya, Turkey
Contact:

Post by *Flint »

ghisler(Author)
Probably, mountvol (or underlying layer) just translated the user-mode name (starting with \\?\) into kernel-mode name (with \??\)…
Flint's Homepage: Full TC Russification Package, VirtualDisk, NTFS Links, NoClose Replacer, and other stuff!
 
Using TC 10.52 / Win10 x64
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 48021
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Anyway, I'm now checking for both, and just skip the link if any of them matches.
Author of Total Commander
https://www.ghisler.com
User avatar
Flint
Power Member
Power Member
Posts: 3487
Joined: 2003-10-27, 09:25 UTC
Location: Antalya, Turkey
Contact:

Post by *Flint »

Confirm fixed in 8.0 final.
Flint's Homepage: Full TC Russification Package, VirtualDisk, NTFS Links, NoClose Replacer, and other stuff!
 
Using TC 10.52 / Win10 x64
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 48021
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Thanks, also for the extra tests you did for me!
Author of Total Commander
https://www.ghisler.com
Post Reply