Utilize reparse points for symlinks

Corinna Vinschen corinna-cygwin@cygwin.com
Fri Sep 24 13:16:00 GMT 2010

On Sep 24 14:03, Andy Koppe wrote:
> On 23 September 2010 16:26, Corinna Vinschen wrote:
> > I experimented a bit further with reparse points, since it occured to me
> > that they are still an excellent method to implement symlinks on NTFS.
> >
> > What we can't do is to use the offical symlink reparse point introduced
> > with Windows Vista for the well-known reasons.
> >
> > However, what we *could* do is to go the official way and request a
> > Cygwin reparse point tag at Microsoft(*).  For testing I implemented
> > this method locally, using the offical REPARSE_GUID_DATA_BUFFER reserved
> > for 3PPs, a reparse tag 0x20007654, and a GUID I generated by using the
> > uuidgen tool from the Microsoft SDK.  Works fine, even as non-admin user,
> > unlike the native Vista symlinks.
> >
> > Why am I pursuing this at all?
> >
> > The reason is that a reparse point can be easily (read: quickly)
> > recognized by the DOS reparse attribute.  The reparse point content can
> > be read without having to use ReadFile, so the access time doesn't
> > change when reading it.  The reparse tag can even be recognized already
> > in readdir for free(**).
> Sounds like a good idea. I assume these still wouldn't work for
> non-Cygwin programs though? Could they still support them by reading
> them themselves (using DeviceIoControl with FSCTL_GET_REPARSE_POINT)?

Yes, sure they could, the format will be documented.  But the POSIX
target path only makes sense if you know the Cygwin mount table, of
course.  That's not different from the other type of Cygwin symlinks.


Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

More information about the Cygwin-developers mailing list