I would like to write comprehensive article about symlinks\hardlinks\junctions\reparse points and mount points in future – however that topic is so complex, that I would need to spend few days just to prepare materials etc for this…
So for now all I want to tell you is that symlinks were supported by Windows since Windows 2000 – implementation was done through “reparse points”, which is something like special tag on NTFS object that allows special FS filter to process them. Biggest limitations were that explorer was not able to handle them correctly (well, it was not able to delete junction, it deleted also target) and only L2L (local to local) symlinks were supported.
In Windows Vista, symlinks are implemented as new NTFS object – so major change is NOT introduction of concept, but rather possibilities and different implementation.
Major difference is that Vista supports all 4 common scenarios:
- L2L (local to local) – for example C:\Documents and settings –> C:\Users)
- L2R (local to remote) – for example C:\MyShare –> \\Server\Share\Martin.SoulinCorp
- R2L (remote to local) – for example \\server\share\DownloadsOnMyPC –> C:\Downloads
- R2R (remote to remote) – for example \\server1\share\Data –> \\server2\share\Data
I don’t have (yet) experiences with R2L and R2R, however I really love L2L (which is possible also in w2k and wxp) and L2R (which is something new, but I love that functionality).
If (for any reason) you want to disable particular scenario, you can use FSUtil .
Syntax is FSUtil Behavior Set SymlinkEvaluation followed by symlink type (L2L etc) and status.
For example if I want to disable R2L and R2R, syntax is FSUtil Behavior Set SymlinkEvaluation R2L:0 R2R:0