Jeder kennt von Windows Vista und Windows 7 die Junctions „C:\Programme“ oder „C:\Dokumente und Einstellungen“.
Diese Verweise erlauben es auch älteren Programmen die evtl. hardcodierte Verzeichnisnamen haben oder auch Programmen, die die alten Verzeichnisstrukturen von Windows 2000 und XP nutzen korrekt zu arbeiten.
Jetzt könnte man meinen, dass es vollkommen egal ist ob man nun „C:\Programme“ oder „C:\Program Files“ benutzt.
Aber das ist es nicht ❗ Es gibt ein paar ganz feine Unterschiede.
Ein simpler DIR auf der Befehlszeile
C:\>dir C:\Programme
Datenträger in Laufwerk C: ist C-LAPTOP
Volumeseriennummer: D483-432C
Verzeichnis von C:\Programme
Datei nicht gefunden
macht das Problem offensichtlich!
Und was geht hier ab?
Die Antwort liefert ICACLS für die Junction:
C:\>icacls C:\Programme
C:\Programme Jeder:(DENY)(S,RD)
Jeder:(RX)
NT-AUTORITÄT\SYSTEM:(F)
ORDEFINIERT\Administratoren:(F)
Dagegen zeigt ICACLS für das Verzeichnis selbst
C:\>icacls "C:\Program Files"
C:\Program Files NT SERVICE\TrustedInstaller:(F)
NT SERVICE\TrustedInstaller:(CI)(IO)(F)
NT-AUTORITÄT\SYSTEM:(M)
NT-AUTORITÄT\SYSTEM:(OI)(CI)(IO)(F)
VORDEFINIERT\Administratoren:(M)
VORDEFINIERT\Administratoren:(OI)(CI)(IO)(F)
VORDEFINIERT\Benutzer:(RX)
VORDEFINIERT\Benutzer:(OI)(CI)(IO)(GR,GE)
ERSTELLER-BESITZER:(OI)(CI)(IO)(F)
Während man auf „C:\Program Files“ die Rechte sieht, die man auch erwartet, liegt auf der Junction selbst eine Einschränkung:
Die Berechtigung zum „Ordner Auflisten“ wird verweigert für „Jeder“ ❗
Jeder der neu eingeführten Junctions hat diese Einschränkung.
Meines Erachtens wurde dies gemacht um beim Durchsuchen von Verzeichnisstrukturen nicht unendliche Rekursionen zu erzeugen oder Verzeichnisse oder Dateien doppelt aufzuführen.
Eine Verzeichnis Rekursion ergäbe sich zum Beispiel durch die Junction Anwendungsdaten im Verzeichnis C:\Users\Username\AppData\Local, der exakt wieder auf das Verzeichnis C:\Users\Username\AppData\Local verweist.