How does OneDrive make its folder not functional for older Windows versions?

58

10

After the Fall 2017 Creators Update for Windows 10 OneDrive folder can not be accessed using prior Windows versions. This oddity is described at the official site:

If you have installed the Fall 2017 Creators Update for Windows 10 and you sync OneDrive files to an external drive, you may be unable to open your OneDrive files if you move the external drive to a computer running an operating system older than Fall 2017 Creators Update for Windows 10.

The suggested workaround is "Use a computer running the Fall 2017 Creators Update for Windows 10 (or newer) to open the content".

I've successfully reproduced the issue with Windows 7 by plugging in a hard drive with a OneDrive folder, created using Windows 10 earlier. Now, when I'm trying to do something with the directory (delete it, or cd into it), I get an error:

The file cannot be accessed by the system.

There are no logical errors in the FS according to chkdsk, also I am the owner of the folder and have all the security privileges. No processes are using the volume. Regardless, I can't do anything with this (and only) folder. What is the blocking mechanism?

enkryptor

Posted 2019-02-04T19:10:11.050

Reputation: 655

Answers

72

NTFS has a feature called reparse points, in which a file or directory can be tagged for special processing by the operating system. It's used to implement quite a few features – e.g. volume mount points (the Unix-ish alternative to drive letters); junctions and symlinks; GitVFS sparse directories; files that are actually stored inside a WIM image; files that have been offloaded to tape or other slow storage; and so on.

Recent versions of OneDrive also use reparse points to implement "online files" – they're placeholders at first, but downloaded on demand. Earlier versions did this at shell level, which didn't work with many programs; using a reparse point and moving the auto-downloading into the core OS makes them almost indistinguishable from local files.

Naturally new tags will result in an error when the path is accessed through an older OS; the NTFS driver doesn't know what to do with such items, so it just rejects the access. It could show e.g. an empty directory, but that could quickly result in more damage when the older OS tries to write to it.

You can use fsutil reparsepoint through Cmd to see the reparse point tag, if any, that's been attached to a file or directory.

user1686

Posted 2019-02-04T19:10:11.050

Reputation: 283 655

11You was right. fsutil reparsepoint query OneDrive showed the data, and fsutil reparsepoint delete OneDrive successfully "unlocked" the directory. – enkryptor – 2019-02-04T19:38:02.777

1Are reparse points not extensible/installable? Surely, the Windows OS does not natively support GitVFS. – usr – 2019-02-04T20:38:37.697

3The Windows OS did in fact receive changes in order to support GitVFS. IIRC, it always had a "minimum Win10 version" requirement. As with OneDrive, I assume it's partial support – the ability for userspace or for custom drivers to hook into the OS... Don't know if it means supporting arbitrary reparse points, or if it means supporting a specific reparse point but letting the implementation be installable. – user1686 – 2019-02-04T20:44:46.870

4

@usr Going forward, ProjFS will likely be the supported option for similar features, as it can be implemented purely in user-mode. It's not yet available in a stable release, though. ProjFS itself is (was?) implemented as a file system filter driver, which has been available as an extension point for quite a few Windows versions (going back through XP, I believe). OneDrive itself uses (used?) CldFlt ("Cloud Files Mini Filter Driver").

– Bob – 2019-02-05T01:22:44.530