Windows 10 OneDrive – How OneDrive Makes Its Folder Not Functional for Older Windows Versions

ntfsonedrivewindowswindows 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?

Best Answer

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.

Related Question