This is the mail archive of the
cygwin-developers
mailing list for the Cygwin project.
Re: Utilize reparse points for symlinks
On Sep 25 09:27, Andy Koppe wrote:
> On 24 September 2010 14:16, Corinna Vinschen wrote:
> > 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.
>
> Yep, whereby the most awkward question would be: the mount table of
> which Cygwin?
...as with any other symlink containing a POSIX path.
> Anyways, a few more questions about these reparse
> points:
>
> How do they appear in Explorer? What happens if you try to open one?
> Is Explorer able to delete them? (Just wondering what complaints to
> expect.)
They appear as normal files of size 0 in explorer. If you try to
open one, the "open with" dialog appears. Since they are normal
files, explorer can delete them.
> Is there a useful error message when trying to execute one from cmd?
> (C:\cygwin\bin\gcc is particularly popular for that. The current
> format results in "Access is denied", which isn't great).
I get this:
"'foo' is not recognized as an internal or external command,
operable program or batch file.
> Finally, would it be possible to write a system-wide handler for these
> reparse points that would make them transparent to all non-Cygwin
> programs?
In theory you could write a filesystem minifilter using the IFS kit
from WDK. However, the file contains POSIX-specific info which makes
no sense from the Win32 POV. What is the filter supposed to do?
Searching for a Cygwin DLL and loading it? Seaching for a fstab file
and trying to evaluate the path by itself?
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Project Co-Leader cygwin AT cygwin DOT com
Red Hat