This is the mail archive of the cygwin-developers mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Utilize reparse points for symlinks


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? 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.)

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).

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?

Andy


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]