Kein Zugriff auf Verzeichnisse unter Windows Vista?

Immer öfter sehe ich die Frage, warum man selbst als Administrator unter Windows Vista auf bestimmte Verzeichnisse keinen Zugriff hat. Wenn man die Diskussionen ein wenig verfolgt, stellt sich oft heraus, dass die Verzeichnisse mit dem kleinen Pfeil daran gemeint sind. Wer sich mit der neuen Ablagestruktur noch nie beschäftigt hat, äußert dann schon mal schnell interessante Verschwörungstheorien oder fühlt sich als Administrator bevormundet. Nichts von alledem ist hier jedoch der Fall.

Was vielen nicht auffällt, ist die Tatsache, dass diese Verzeichnisse keine echten Verzeichnisse sind. Es handelt sich dabei um NTFS Links, die einen virtuellen Ordner darstellen, der in Wirklichkeit auf einen ganz anderen Pfad verweist. In Windows Vista wird diese Technik bevorzugt verwendet, damit Anwendungen, die nicht die Systemfunktion zum Herausfinden des jeweiligen Pfades benutzen, sondern die Pfade hart kodiert haben, trotzdem unter Windows Vista funktionieren.

Die neue Ablagestruktur kann damit von allen Programmen verwendet werden, die die Systemfuntionen richtig benutzen. Die Anwendungen, die das nicht tun, werden schlichtweg an den neuen Ort geleitet, ohne dass sie etwas davon bemerken.

Soweit zum Hintergrund. Es bleibt die Frage, warum man nun auf diese Links keinen Zugriff hat. Hier ist es wichtig, sich einmal die NTFS Berechtigungen auf diesen Links anzuschauen. Everyone - also allen Benutzern - ist dort Ordner auflisten und Daten lesen verboten. Das bedeutet aber nicht, dass man keinen Zugriff auf die Links hat. Ein kleiner Versuch auf der Kommandozeile zeigt, wie diese Links funktionieren. Nehmen wir zum Beispiel den Ordner My Documents. Wenn ich in meinem Ordner Dokumente einen Unterordner mit dem Namen Test erzeuge, dann sehe ich an der Kommandozeile folgendes:

C:\>dir C:\Users\daniel\Documents\Test
Datenträger in Laufwerk C: ist Vista
Volumeseriennummer: 8451-BEE1

Verzeichnis von C:\Users\daniel\Documents\Test

24.11.2006 15:01 <DIR> .
24.11.2006 15:01 <DIR> ..
0 Datei(en), 0 Bytes
2 Verzeichnis(se), 14.832.345.088 Bytes frei

Diesen Weg nimmt jede Anwendung, die regelkonform den Ablageort meiner eigenen Dateien mit Hilfe der vom System zur Verfügung gestellten Funktionen ermittelt. Wenn die Anwendung aber den Pfad, der unter Windows XP üblich war, hart kodiert hat, dann nutzt sie folgenden Weg:

C:\>dir "C:\Documents and Settings\daniel\My Documents\Test"
Datenträger in Laufwerk C: ist Vista
Volumeseriennummer: 8451-BEE1

Verzeichnis von C:\Documents and Settings\daniel\My Documents\Test

24.11.2006 15:01 <DIR> .
24.11.2006 15:01 <DIR> ..
0 Datei(en), 0 Bytes
2 Verzeichnis(se), 14.832.345.088 Bytes frei

Wie man sieht, merkt die Anwendung von der Umlenkung nichts. Sie funktioniert einfach weiter, weil sie glaubt, im richtigen Verzeichnis zu schreiben, obwohl es unter Windows Vista die falsche Stelle ist. Anstatt die Anwendung hier aber auflaufen zu lassen, wird sie unter Windows Vista über den Link an die richtige Stelle umgeleitet. Diese Links sind also aus Abwärtskompatibilitätsgründen da.

Wer derartige Links selbst für eigene Zwecke erzeugen möchte, kann das unter Windows Vista mit dem mitgelieferten Programm mklink.exe tun:

C:\Users\daniel>mklink
Erstellt eine symbolische Verknüpfung.

MKLINK [[/D] | [/H] | [/J]] Verknüpfung Ziel

/D Erstellt eine symbolische Verknüpfung für ein Verzeichis.
Standardmäßig wird eine symbolische Verknüpfung für
eine Datei erstellt.
/H Erstellt eine feste Verknüpfung anstelle einer
symbolischen Verknüpfung.
/J Erstellt eine Verzeichnisverbindung.
Verknüpfung Gibt den Namen für die symbolischen Verknüpfung an.
Ziel Gibt den Pfad (relativ oder absolut) an, auf den die
neue Verknüpfung verweist.

Bleibt die Frage, warum nun ein Anwender die Links nicht direkt anklicken kann. Der Grund ist dafür trivial: Obwohl NTFS Links schon lange technisch möglich sind, sind die wenigsten Anwendungen darauf vorbereitet, weil diese Links bisher nicht oder nur sehr selten benutzt wurden.

Wenn ich zum Beispiel das Programm TreeSize benutze, um damit den Platzverbrauch der Ordner, Unterordner und Dateien auf dem Laufwerk zu ermitteln, dann kommen dabei völlig falsche Werte heraus, weil das Programm die Links nicht von echten Verzeichnissen unterscheidet und dann doppelt und dreifach zählt oder sich sogar im Kreis drehen kann. Das Verbot für jeden, von Links Ordner auflisten und Daten lesen zu können, sorgt dafür, dass genau das nicht passiert.

Damit die Anwender von diesen Links nicht irritiert werden und vor allem die Übersichtlichkeit von Ordnern wie C:\Users\daniel erhalten bleibt, blendet Windows Vista standardmäßig diese Links aus. Das Ausblenden lässt sich über die Einstellungen des Explorers auf dem Ansicht-Tab unter Extras | Ordneroptionen... konfigurieren. Dort findet man die Option Geschützte Systemdateien ausblenden (empfohlen) , welche standardmässig aktiviert ist.

Diese Option sollte auch nicht ausgeschaltet werden, weil das Verhalten sich dabei von den Vorgängerversionen unterscheidet. Unter Windows Vista reicht es aus, die versteckten Dateien einblenden zu lassen, wenn man die Systemordner sehen möchte, die bei Windows XP bei gleicher Konfiguration damit noch nicht zu sehen bekam.

Wie man auf dem zweiten Screenshot sieht, ist damit die Übersichtlichkeit gewahrt und trotzdem der Ordner AppData, der normalerweise ausgeblendet ist, sichtbar. Ein weitergehendes Einblenden von geschützten Systemdatein ist meiner Meinung nach hier nicht wirklich sinnvoll - wer es aber unübersichtlich mag, kann natürlich gern die Option deaktivieren :-)