Overview of the Bindlink API (Übersicht über die Bindungslink-API)

Mit der Bindungslink-Bibliothek können Administratoren einen Dateisystem-Namespace über den Bindungsfilter (Minifilter bindflt.sys) an einen lokalen virtuellen Pfad binden. Bindungslinks stellen eine Dateisystemumleitung von einem lokalen virtuellen Pfad zu einem lokalen oder Remotesicherungspfad bereit. Sie können hauptsächlich zwei Arten von Szenarien ermöglichen: Erstens können sie entfernte Dateien über eine Netzwerkfreigabe als lokal erscheinen lassen, was die Kompatibilität von Anwendungen verbessert, und zweitens ermöglichen sie Szenarien, in denen eine Anwendung Dateien von verschiedenen Orten an einem neuen Ort erscheinen lassen will, möglicherweise mit anderen Namen und Verzeichnisstrukturen, ohne die Dateien zu kopieren. Bindungslinks sind transparent für Anwendungen, und alle vorhandenen APIs funktionieren ohne Wissen über diese Umleitung. Für den virtuellen Pfad werden keine physischen Dateien oder Verzeichnisse erstellt, und Bindungslinks erweitern die Sicherheitsdeskriptoren und Berechtigungen der Dateien und Verzeichnisse im Sicherungspfad bis zum virtuellen Pfad.

Verbrauch

Der Satz von APIs besteht aus zwei verwandten Funktionen:

  • CreateBindLink – Diese API ermöglicht Administratoren das Erstellen eines Bindungslinks zwischen einem virtuellen Pfad und einem Sicherungspfad.
  • RemoveBindLink – Mit dieser API kann ein Benutzer einen Link entfernen, der zuvor durch Aufrufen von CreateBindLink erstellt wurde.

Beispiele für die Verwendung dieser Funktionen finden Sie unter Bindlink-Beispiele.

Bindungslinks sind für die Anwendungen transparent und während diese Links vorhanden sind, gelten alle Vorgänge für den Sicherungspfad. Daher wirkt sich DeleteFile oder RemoveDirectory auf den Sicherungspfad aus und löscht diesen effektiv, jedoch nicht den Link. Diese API schlägt in folgenden Fällen fehl: Der Benutzer hat keine Administratorrechte; der Benutzer hat keine Berechtigungen zum Öffnen des virtuellen Pfads oder des Sicherungspfads; der Sicherungspfad ist nicht vorhanden; ein anderer Link ist für den virtuellen Pfad vorhanden; beim Einrichten des Links tritt ein interner Fehler auf. Insbesondere sollte der Administratorbenutzer in der Lage sein, den Filter (Berechtigungen für FilterAttach) anzufügen, eine Verbindung mit dem Filterport herstellen (Berechtigungen für FilterConnectCommunicationPort) und auf den Stamm des Sicherungspfads zuzugreifen, sonst schlägt die API mit ERROR_ACCESS_DENIED fehl.

Wenn eine App versucht, dem Link zu einem Sicherungspfad zu folgen, der nach dem Einrichten des Links gelöscht wurde, wird ERROR_FILE_NOT_FOUND angezeigt. Wenn später der Sicherungspfad erneut erstellt wird, gilt der Link jetzt für diesen neuen Sicherungspfad. Wenn eine Datei im virtualPath erstellt werden soll, während der Link vorhanden ist, wird sie in dem virtualPath angezeigt, wenn der Link vorhanden ist, die Datei wird jedoch physisch auf dem Sicherungspfad erstellt. Wenn der Link entfernt wird, wird die Datei nur im Sicherungspfad angezeigt und wird nicht mehr im virtualPath angezeigt. Dies gilt für alle Arten von nachfolgend beschriebenen Links.

Je nachdem, ob der virtuelle Pfad auf dem Datenträger vorhanden ist, handelt es sich bei dem resultierenden Link entweder um einen ankerlosen Link oder um einen Schattenlink.

Ankerlose Links sind Bindungslinks, die erstellt werden, wenn vor dem Erstellen des Links der virtuelle Pfad nicht auf dem Datenträger vorhanden ist. Wenn ein Link diesen Typs erstellt wird, wird der virtuelle Pfad im Arbeitsspeicher synthetisiert und wie ein normaler Pfad im Dateisystem angezeigt. Beachten Sie, dass zum Erstellen eines solchen Bindungslinks das übergeordnete Element des virtuellen Pfads entweder als On-Disk-Verzeichnis oder als zuvor erstellter Link vorhanden sein muss. Beispiel: Um C:\Foo\Bar als virtuellen Pfad zu verwenden, muss C:\Foo ein Verzeichnis auf dem Datenträger sein oder zuvor als virtueller Pfad für einen anderen Link erstellt werden. Da kein übergeordnetes Element für ein Volume vorhanden ist, kann kein ankerloser Link zu einem Volume existieren, das nicht vorhanden ist. Das Erstellen eines Bindungslinks mit einem virtuellen Pfad „Z:“ würde beispielsweise fehlschlagen, wenn noch kein Volume mit dem Namen „Z:“ vorhanden war.

Ein Schattenlink ist ein Link, bei dem der virtuelle Pfad auf dem Volume vorhanden ist, bevor der Link erstellt wird. Wenn ein solcher virtueller Pfad zum Erstellen eines Links verwendet wird, werden die Inhalte des virtuellen Pfads ausgeblendet, während der Inhalt des Sicherungspfads im virtuellen Pfad sichtbar wird. Beispiel:

  • C:\Foo ist auf dem Datenträger mit zwei Dateien Cat.txt und Dog.txt vorhanden
  • C:\Bar ist auf dem Datenträger mit den beiden Dateien Cow.txt und Mouse.txt vorhanden

Wenn ein Link mit C:\Foo als virtueller Pfad und C:\Bar als Sicherungspfad erstellt wird, zeigt der Pfad „C:\Foo“ dann Cow.txt und Mouse.txt für alle Benutzer an, während Cat.txt und Dog.txt ausgeblendet werden, bis der Link entfernt wird.

Ein weiteres Beispiel im folgenden Diagramm hilft dabei, zwischen Schattenlinks und ankerlosen Links zu unterscheiden.

Anchorless versus shadow bind links diagram

Ein Benutzer, der c:\Foo auflistet, findet das Verzeichnis und seine vorhandenen Inhalte, auch bevor einer der im Diagramm angezeigten Bindungslinks erstellt werden. Nachdem die Links erstellt wurden, werden durch das Auflisten von c:\Foo der Pfad „C:\Foo\Bar“ und die Datei „Cow.txt“ angezeigt. Da C:\Foo auf dem Datenträger mit oder ohne Link vorhanden ist, ist der Link zwischen C:\Foo und \\Remote\Target ein Schattenlink.

Einem Benutzer, der c:\Foo auflistet, wird c:\Foo\Bar erst angezeigt, nachdem der zweite Bindungslink erstellt wurde. Da C:\Foo\Bar erst nach dem Hinzufügen des Links zwischen c:\Foo\Bar und C:\Target2 angezeigt wird, ist der Pfad rein virtuell und damit ist der Link zwischen c:\Foo\Bar und C:\Target2 ein ankerloser Link.

Beachten Sie, dass für beide Arten von Links die Sicherheitsdeskriptoren des Sicherungspfads gelten.

Bestimmte Flags können übergeben werden, um das Standardverhalten entsprechend den Anforderungen des Benutzers zu ändern.

Ein zusammengeführter Link ist ein Schattenlink, mit der Ausnahme, dass der vorhandene Inhalt im virtuellen Pfad mit dem Sicherungspfad zusammengeführt wird. Um diese Art von Links zu erstellen, sollte das Flag CREATE_BIND_LINK_FLAG_MERGED verwendet werden.

Betrachten wir das vorherige Beispiel für Schattenlinks erneut mit dem Hinzufügen dieses Flags.

Beispiel:

  • C:\Foo ist auf dem Datenträger mit zwei Dateien Cat.txt und Dog.txt vorhanden
  • C:\Bar ist auf dem Datenträger mit den beiden Dateien Cow.txt und Mouse.txt vorhanden

Wenn ein Link mit C:\Foo als virtueller Pfad und C:\Bar als Sicherungspfad mit dem Flag CREATE_BIND_LINK_FLAG_MERGED erstellt werden, zeigt der C:\Foo-Pfad die Dateien Cat.txt, Dog.txt, Cow.txt und Mouse.txt an.

Beachten Sie, dass zusammengeführte LInks nur angewendet werden, wenn der virtuelle Pfad ein Verzeichnis ist. Wenn eine Datei sowohl im Sicherungspfad als auch im virtuellen Pfad angezeigt wird, hat die Datei im Sicherungspfad Vorrang, d. h. die Datei im virtuellen Pfad ist maskiert. Dies gilt rekursiv für alle Verzeichnisse innerhalb des virtuellen Pfads. Da die Zusammenführung für Verzeichnisse gilt, wenn sowohl der virtualPath als auch der backingPath über ein Verzeichnis mit demselben Namen auf derselben Ebene verfügen, wird das Verzeichnis als Ergebnis des Links zusammengeführt. Wenn der Link kein zusammengeführter Link war, hat das Verzeichnis im backingPath Vorrang und überschreibt das Verzeichnis im virtualPath. Wenn eine Datei beim Öffnen des zusammengeführten Pfads erstellt wurde, wenn der zusammengeführte Link vorhanden ist, wird sie physisch im backingPath erstellt (wie dies bei jedem Bindungslink der Fall ist), und überschreibt eine Datei mit demselben Namen im virtualPath.

Betrachten wir die folgenden Verzeichnisstrukturen und die beiden verschiedenen Links:

  • c:\Foo\Sub\Foo_sub.txt
  • c:\Bar\Sub\Bar_sub.txt.

Wenn c:\Foo mit c:\Bar ohne Zusammenführung verknüpft ist, zeigt c:\Foo\Sub nur Bar_sub.txt an. Wenn c:\Foo jedoch mit c:\Bar mit Zusammenführung verknüpft ist, werden sowohl Foo_sub.txt als auch Bar_sub.txt c:\Foo\Sub angezeigt.

Da Bindungslinks pfadbasierte Links sind, verweist der virtuelle Pfad auf die Datei, die zum Zeitpunkt der Verknüpfung vorhanden ist, wenn eine Datei ersetzt, geändert oder gelöscht/neu erstellt wird, nachdem der Link erstellt wurde. Dies geschieht, weil der Link beim Öffnen einer Datei aufgelöst wird. Wenn eine Datei aus dem Sicherungspfad aufgrund des Links eine Datei im virtuellen Pfad maskiert hat und die Datei im Sicherungspfad gelöscht wurde, wird sie durch eine nachfolgende Anforderung zum Öffnen der Datei im virtuellen Pfad geöffnet.

Schreibgeschützte Links sind Bindungslinks, bei denen Benutzer im System daran gehindert werden, Änderungen an Dateien vorzunehmen, die sich im Sicherungspfad befinden, wenn sie über den virtuellen Pfad aufgerufen werden. Dies bedeutet, dass ein Benutzer mit der Berechtigung zum Ändern einer Datei im Sicherungspfad diese Datei weiterhin ändern kann, wenn sie über den Sicherungspfad darauf zugreifen, aber nicht, wenn sie über den virtuellen Pfad darauf zugreifen. Normalerweise gelten die Berechtigungen des Sicherungspfads, wenn auf den entsprechenden virtuellen Pfad zugegriffen wird. Wenn jedoch das Flag CREATE_BIND_LINK_FLAG_READ_ONLY verwendet wird, werden die Schreibberechtigungen maskiert. Dadurch wird sichergestellt, dass Anwendungen sehen, dass die Datei CREATE_BIND_LINK_FLAG_READ_ONLY ist.

Beachten Sie, dass die schreibgeschützte Einschränkung nur für Dateien gilt, die sich im Sicherungspfad auf dem Datenträger befinden. Wenn der Link zusammengeführt wird und Dateien, die ursprünglich aus dem virtuellen Verzeichnispfad stammen, sichtbar sind, bleiben sie modifizierbar.

Beispiel:

  • C:\Foo ist auf dem Datenträger mit der Datei Cat.txt vorhanden
  • C:\Bar ist auf dem Datenträger mit der Datei Cow.txt vorhanden

Wenn ein Link mit C:\Foo als virtueller Pfad und C:\Bar als Sicherungspfad erstellt und der Link als schreibgeschützt markiert und zusammengeführt wird, werden sowohl Cat.txt als auch Cow.txt bei C:\Foo angezeigt, Cat.txt kann jedoch geändert werden, während Cow.txt nicht geändert werden kann.

Darüber hinaus unterstützt diese API mehrere andere Linkszenarien. Diese werden in den folgenden Abschnitten beschrieben.

Bindungslinks können geschachtelt werden. Dies bedeutet, dass ein Vorgänger oder eine untergeordnete Komponente eines virtuellen Pfads auch ein virtueller Pfad für seinen eigenen Link sein kann.

Beachten Sie, dass es keine Einschränkung für die anschließenden kreisförmige Links gibt.

Nested bind links diagram

Sehen Sie sich die Links und ihre Reihenfolge im Diagramm „Geschachtelte Bindungslinks“ oben an.

Wenn ein Link mit dem virtuellem Pfad C:\Foo\Bar erstellt wird, kann ein anderer Link mit C:\Foo als virtueller Pfad erstellt und ein weiterer Link mit C:\Foo\Bar\Baz als virtueller Pfad erstellt werden.

Beispiel:

  • C:\Target ist auf dem Datenträger mit der Datei Cat.txt vorhanden
  • C:\Target2 ist auf dem Datenträger mit der Datei Dog.txt vorhanden
  • C:\Foo ist auf dem Datenträger mit dem Bar-Verzeichnis vorhanden

Wenn C:\Foo\Bar mit C:\Target (Link1) verknüpft und C:\Foo mit C:\Target2 (Link2) verknüpft ist, wird ein Benutzer, der C:\Foo auflistet, die Dog.txt-Datei und das Bar-Verzeichnis sehen, da Bar ein virtueller Pfad für seinen eigenen Link ist. Wenn C:\Foo\Bar\Baz anschließend mit C:\Target2 (Link3) verknüpft wird, wird ein Benutzer, der c:\Foo\Bar auflistet, Cat.txt und das Verzeichnis Baz sehen, da Baz ein virtueller Pfad für seinen eigenen Link ist.

Die folgenden Punkte sind wichtig und sollten bei der Entscheidung über das Ergebnis eines Links oder einer Reihe von Links immer zusammen berücksichtigt werden:

  1. Der Sicherungspfad hat immer Vorrang und setzt außer Kraft, wenn eine Entität mit denselben Namen im virtuellen Pfad oder aufgrund eines Links vorhanden ist. Dies gilt für alle Arten von Bindungslinks.

    Sehen Sie sich z. B. folgenden Link an:

    c:\Foo ist mit c:\Target verknüpft, wobei c:\Target eine Datei ist.

    In diesem Fall sieht c:\Foo wie eine Datei mit dem Inhalt c:\Target für einen ankerlosen Link aus. Auch wenn c:\Foo ein lokal vorhandenes Verzeichnis ist (Schattenlink), sieht c:\Foo aufgrund des obigen Links wie eine Datei aus, wenn der Link und der Sicherungspfad vorhanden sind.

  2. Im Falle von widersprüchlichen Links hat der zuletzt erstellte Link Vorrang. Der letzte Link blendet jedoch den vorherigen Link nicht aus.

    Ein weiteres Beispiel sind die folgenden Links. Der zweite Link ändert die Ansicht des Namespace.

    • Link1: c:\Foo ist mit c:\Target verknüpft, wobei c:\Target ein Verzeichnis ist. c:\Target verfügt über die Datei „Bar“
    • Link2: c:\Foo\Bar ist mit c:\Target2 verknüpft, wobei Target2 ein Verzeichnis ist, das die Datei Cat.txt enthält

    Order of bind links diagram

    In diesem Fall enthält c:\Foo nach dem Erstellen von Link1 die Bar-Datei. Nach Link2 zeigt c:\Foo jedoch ein Bar-Verzeichnis mit der Datei Cat.txt an. Wenn c:\Target2 eine Datei wäre, ist c:\Foo\Bar eine Datei mit dem Inhalt von C:\Target2.

    Wenn die Reihenfolge der Links dagegen wie unten dargestellt umgekehrt wurde, wird c:\Foo\Bar weiterhin als Verzeichnis angezeigt, das die Datei Cat.txt von c:\Target2 enthält. Der Sicherungspfad hat Vorrang vor Elementen unter einem virtuellen Pfad, sie haben jedoch keine Vorrang vor dem virtuellen Pfadstamm selbst.

    • Link1: c:\Foo\Bar ist mit c:\Target2 verknüpft, wobei Target2 ein Verzeichnis ist, das die Datei Cat.txt enthält
    • Link2: c:\Foo ist mit c:\Target verknüpft, wobei c:\Target ein Verzeichnis ist. c:\Target verfügt über die Datei „Bar“
  3. Damit ein Link erfolgreich erstellt werden kann, sollte das übergeordnete Element des virtuellen Pfads entweder lokal vorhanden sein oder aufgrund des BackingPath in einem vorherigen Link angezeigt werden oder selbst ein virtueller Pfad in einem Link sein.

    Beispiel: Wenn c:\Foo anfangs mit c:\Target verknüpft ist und dann c:\Foo\Bar\Baz mit einem Sicherungspfad verknüpft wird, wird der Link von c:\Foo\Bar\Baz erfolgreich ausgeführt, wenn c:\Foo\Bar aufgrund einer der folgenden Bedingungen vorhanden ist:

    • c:\Foo\Bar ist lokal vorhanden und eine Ausnahme im vorherigen Link stellt sicher, dass c:\Foo\Bar nicht durch c:\Target abgeschattet wurde (siehe Ausnahmen im nächsten Abschnitt) oder
    • c:\Foo\Bar ist aufgrund des vorherigen Links vorhanden (d. h., wenn c:\Target über eine Verzeichnisleiste verfügt) oder
    • c:\Foo\Bar ist ein virtueller Pfad selbst in einem anderen Link (c:\Foo\Bar ==> etwas)

    Hinweis

    Dies bedeutet, dass verschachtelte Ankerlinks mit dem tiefsten Link erstellt werden müssen, der zuletzt erstellt wird. Schattenlinks haben jedoch keine solchen Einschränkungen, da die virtuellen Pfade bereits auf dem Datenträger vorhanden sind.

Betrachten Sie die folgenden Links, die in derselben Reihenfolge erstellt wurden:

  • C:\Foo ist mit C:\Target verknüpft
  • C:\Foo\Bar ist mit c:\Target2 verknüpft

Das Erstellen eines Links hat keine Auswirkungen auf das Verhalten des Sicherungspfads. Daher wird die virtuelle Verzeichnisleiste in c:\Foo und nicht in c:\Target angezeigt. Die Linktabelle sieht wie folgt aus:

  • C:\Foo --> c:\Target, C:\Foo\Bar --> c:\Target2 und nicht
  • C:\Foo --> c:\Target, c:\Target\Bar --> c:\Target2

Optional können Ausnahmen angegeben werden, um den Geltungsbereich des erstellten Links einzuschränken. Ausnahmepfade sind die untergeordneten Pfade des virtuellen Pfads, auf die der Link nicht angewendet wird. Ausnahmepfade können Dateien oder Verzeichnisse sein, sollten jedoch ein untergeordneter Pfad des virtuellen Pfads sein. Die APIs erfordern, dass auf die Ausnahmepfade zugegriffen werden kann, wenn der Link erstellt wird. Die Ausnahme gilt für alle untergeordneten Pfade des Ausnahmepfads. Beispiel:

  • C:\Foo ist auf dem Datenträger vorhanden und enthält ein Bar-Verzeichnis und ein Baz-Verzeichnis
  • C:\Foo\Bar enthält Cat.txt
  • C:\Foo\Baz enthält Dog.txt
  • C:\Target ist auf dem Datenträger vorhanden und enthält die Datei Cow.txt

Wenn ein Link von C:\Foo zu C:\Target mit einer Ausnahme für C:\Foo\Baz erstellt wird, wird dem Benutzer Folgendes angezeigt:

  • C:\Foo enthält die Datei Cow.txt aus C:\Target und das Verzeichnis Baz mit seiner untergeordneter Datei Dog.txt. Beachten Sie, dass C:\Foo\Bar nicht sichtbar ist, da dieser Pfad durch den Link schattiert wurde.

Das folgende Diagramm stellt das oben beschriebene Szenario dar:

Bind link exceptions diagram

Und schließlich gelten Bindungslink-Ausnahmen nicht für ankerlose Links, da ankerlose virtuelle Pfade nach Definition keine untergeordneten Elemente aufweisen und daher keine Pfade haben, die sich qualifizieren. Die API gibt einen Fehler zurück, wenn versucht wird, Ausnahmen an einen ankerlosen Link zu übergeben.

Siehe auch

Bindungslinkfunktionen

Bindungslink-API-Enumerationen

Bindungslink-Beispiele