Xanashi / Icaros

Official issue tracker and download location for Icaros Shell Extensions
700 stars 8 forks source link

Thumbnails not available for files in symbolic links to network paths #22

Open DorCoMaNdO opened 3 years ago

DorCoMaNdO commented 3 years ago

As I just posted over on the forums: https://shark007.net/forum/Thread-New-Release-3-2-1-Final?pid=430#pid430

Thumbnails do not get properly generated for files in symbolic links to network paths.

I recently built a NAS and moved a bunch of media to it, Windows Explorer properly generates thumbnails (both via and without Icarus) for media viewed through the network path (\\address\share\...) or through a mapped network drive, but NOT through a symbolic link to a network path (mklink /D "D:/Media" "\\address\Media"), I primarily use the symbolic link to access my media, I saw that the old change logs (version 2.0.0) mentioned a fix for thumbnails on network drives, could this be addressed for symbolic links to network paths as well? Windows Explorer does manage to generate thumbnails to certain JPG files, but not all, and all other media has no thumbnails (but the default ones).

I use Windows 8.1 but this is an issue that's been reported online as far back as Windows 7 and as far forward as 10.

If this does get fixed, but image formats remain broken (since they're not handled by Icaros), would it be possible for Icaros to generate thumbnails the same way Windows does for images? (mostly regarding gifs, use the same frame Windows picks for the thumbnail).

clsid2 commented 3 years ago

I suspect Windows might be blocking this for security reasons. Microsoft has tightened security in Windows 8 and even more in 10.

The fact that the standard thumbnail plugin also doesn't work could mean that Explorer might not even be loading Icaros for such symlinked files. So solving it would then be impossible.

DorCoMaNdO commented 3 years ago

The fact that the standard thumbnail plugin also doesn't work could mean that Explorer might not even be loading Icaros for such symlinked files.

But as I mentioned, it does, though it's highly limited, seems to only work for certain JPG files, likely based on compression/quality/bit depth, I have a bunch of family photos from a really old camera, those all seem to work, some downloaded digital drawings also work, but the vast majority of media does not.

I'll also specify that it's the directories being symlinked, not individual files, but symlinks to individual files (which I tried in the past) also does not generate thumbnails, even for files on local drives, however symlinks and junctions (both /D and /J) on local drives both generate thumbnails for files inside. Hardlinks to individual files work fine.

I'll also reiterate that Icaros does generate thumbnails over the network, as long as it's at a direct network path or mounted network drive, but not sym links, so this doesn't seem like a security change, this seems more like a symlink issue than a network issue, which can hopefully be addressed.

Edit: Windows has quirky behavior with network media in general, Windows Media Player is able to play media from direct network paths and symlinks to network paths, but NOT from paths mounted as drives, this isn't an issue with players like VLC, but WMP and other parts of windows seem to not be fully prepared for network shares, you can't sym link with the source being a network drive path (claims not found), it always has to be the full share path, I'm assuming a similar issue with WMP being unable to load the file to play, and thumbnails are potentially affected in a similar way.

Xanashi commented 3 years ago

Hi DorCoMaNdO,

I tried my best to reproduce this issue without having access to a local network path, and so far haven't been able to recreate the bug. I tried to setup a VM in VirtualBox, and create a symlink to the Shared Folder which simulates a network path, but thumbnailing still worked fine, so I assume it's not enough. (I used the following command to create the link: mklink /D "C:\Users\VMUser\Desktop\Symlink" "\VBOXSVR\Shared_files\MKV Samples")

If I can somehow manage to reproduce the issue, I can probably tell you more, but there is a good chance that the issue is Windows itself as clsid2 mentioned above. The problem is MS decides when and where shell extensions are called by Explorer. The shell extensions themselves are just passive modules waiting to be called and used by Windows. So if MS decided that some network paths should not call third party shell extensions (most likely for security reasons), or maybe only use cached thumbnails, then there is not much I can do.

Reproducing the bug would be useful in knowing for sure though.

clsid2 commented 3 years ago

Use ProcessMonitor and make it filter for Path contains = icaros. Then you will know if it gets loaded after selecting the symlink in Explorer.

DorCoMaNdO commented 3 years ago

Icaros appears to always be loaded by explorer, in local folders, remote drives, remote paths, and remote symlinks. In the thread reporting a similar issue to this since Windows 7, there were some mixed reports of newer Windows 10 versions fixing whatever issue this is, I'm currently on 8.1 and due to my current setup I cannot upgrade to Windows 10 as a (potential) solution for this issue. Would you mind re-running your VM test on Windows 8.1? You can get an ISO from "TechBench by WZT".

DorCoMaNdO commented 2 years ago

I'm now on Windows 10 update 2020H2 experiencing the same issue, but with potential progress since my original report.

About a week before cloning my system and upgrading I found that the issue I was having with Windows Media Player not playing media through network drives was caused by the default Internet Options, setting both the hostname and the local ip address of the NAS as part of the local network category and remounting (or rebooting) solved that problem, however it did nothing to address issue with thumbnails.

A couple of days ago I also set up my online backup program to also make a "local" copy of some files to the NAS and I found that due to the service running as Local System, the saved credentials for the network paths did not apply when the service attempted to access the path, requiring me to change the service to run as my Windows user to workaround that.

Since I've seen Icaros load up in ProcessMonitor I'm guessing it's not an Internet Options problem, I do believe it might be a permission problem though, I'm assuming shell extensions are run as SYSTEM or something and perhaps are affected by the same issue the backup client service was, I doubt a similar workaround can be performed, so perhaps you could add a configuration file to add credentials (probably ones I'd give read-only access to) and then you'd try detecting (or adding pattern matching with * (any character and any mount of characters), ? (any single character) and # (any single digit) wildcards, i.e. \\192.168.1.5\*) network paths (or mounted network drives/directory junctions to network paths) so multiple credentials could be set to different paths, i.e. \\192.168.1.5\*;user@password)

vvirtues commented 2 years ago

not sure if this is related, but OneDrive files seem to do the same thing, with the exception of one .jpg (see image). putting the files in debug works for thumbnailing via icaros (https://cdn.pinglik.eu/u/files/vZ4shN0yZ9pqVcyoMQunc0rGaNOKW8WNhGjQ), but when using thumbnailing via explorer (https://cdn.pinglik.eu/u/files/wcl0v8FQpZKzWAHrfOgQU78QABzqxYugcccw), the provider is icaros but it doesnt seem to inject/load https://cdn.pinglik.eu/u/files/HJWvHeAReAQQQyxTbR0mZ40kw1icpmDqt9my

DorCoMaNdO commented 2 years ago

Yeah it's exactly the same for me, and yes as I also mentioned some jpg files do work but the vast majority don't. However in my case for some reason if I use direct network paths it works fine, if I use mapped paths it does not.