Cachestatus im Virtualisierungsstamm
Der Anbieter verwendet das lokale Dateisystem unter dem Virtualisierungsstamm als Cache der von ihm verwalteten Elemente. Ein Element (Datei oder Verzeichnis) kann sich im lokalen Dateisystem in einem von sechs Zuständen befinden:
Virtuell
Das Element ist nicht lokal auf dem Datenträger vorhanden. Es wird projiziert, d. h. synthetisiert, während Enumerationen seines übergeordneten Verzeichnisses. Virtuelle Elemente werden mit allen Elementen zusammengeführt, die möglicherweise auf dem Datenträger vorhanden sind, um den vollständigen Inhalt des übergeordneten Verzeichnisses darzustellen.
Platzhalter
Für Dateien: Der Inhalt der Datei (primärer Datenstrom) ist auf dem Datenträger nicht vorhanden. Die Metadaten der Datei (Name, Größe, Zeitstempel, Attribute usw.) werden auf dem Datenträger zwischengespeichert.
Für Verzeichnisse: Einige oder alle unmittelbaren Nachfolger des Verzeichnisses (die Dateien und Verzeichnisse im Verzeichnis) sind auf dem Datenträger nicht vorhanden, d. h. sie sind noch virtuell. Die Metadaten des Verzeichnisses (Name, Zeitstempel, Attribute usw.) werden auf dem Datenträger zwischengespeichert.
Aktivierter Platzhalter
Für Dateien: Der Inhalt und die Metadaten der Datei wurden auf dem Datenträger zwischengespeichert. Wird auch als "Teildatei" bezeichnet.
Für Verzeichnisse: Ein Verzeichnis, das auf dem Datenträger als Platzhalter erstellt wurde, wird nie zu einem aktivierten Platzhalterverzeichnis. Dadurch kann der Anbieter dem Verzeichnis in seinem Sicherungsspeicher Elemente hinzufügen oder daraus entfernen und diese Änderungen im lokalen Cache widerspiegeln.
Schmutziger Platzhalter (hydratisiert oder nicht)
Die Metadaten des Elements wurden lokal geändert und sind kein Cache des Zustands mehr im Speicher des Anbieters. Beachten Sie, dass das Erstellen oder Löschen einer Datei oder eines Verzeichnisses unter einem Platzhalterverzeichnis dazu führt, dass dieses Platzhalterverzeichnis modifiziert wird.
Vollständige Datei/Vollständiges Verzeichnis
Für Dateien: Der Inhalt der Datei (primärer Datenstrom) wurde geändert. Die Datei ist nicht mehr ein Cache ihres Zustands im Speicher des Anbieters. Dateien, die im lokalen Dateisystem erstellt wurden (d. h. die überhaupt nicht im Speicher des Anbieters vorhanden sind), werden ebenfalls als vollständige Dateien betrachtet.
Für Verzeichnisse: Verzeichnisse, die im lokalen Dateisystem erstellt wurden (d. h. die im Speicher des Anbieters überhaupt nicht vorhanden sind), gelten als vollständige Verzeichnisse. Ein Verzeichnis, das auf dem Datenträger als Platzhalter erstellt wurde, wird nie zu einem vollständigen Verzeichnis.
Tombstone
Ein spezieller ausgeblendeter Platzhalter, der ein Element darstellt, das aus dem lokalen Dateisystem gelöscht wurde. Wenn ein Verzeichnis aufgezählt wird, führt ProjFS den Satz lokaler Elemente (Platzhalter, vollständige Dateien usw.) mit dem Satz virtueller projizierter Elemente zusammen. Wenn ein Element sowohl in der lokalen als auch in der projizierten Sätze angezeigt wird, hat das lokale Element Vorrang. Wenn eine Datei im lokalen Dateisystem nicht vorhanden ist, gibt es keinen lokalen Zustand, sodass sie in der Enumeration angezeigt wird. Wenn dieses Element jedoch gelöscht worden wäre, wäre es unerwartet, wenn es in der Enumeration angezeigt wird. Das Ersetzen eines gelöschten Elements durch einen Tombstone führt zu den folgenden Auswirkungen:
- Enumerationen, um das Element nicht anzuzeigen.
- Die Datei wird geöffnet, die erwartet, dass das Element vorhanden ist, schlägt z. B. mit "Datei nicht gefunden" fehl.
- Eine Datei erstellt, die nur dann erfolgreich ist, wenn das Element nicht erfolgreich vorhanden ist. ProjFS entfernt den Grabstein im Rahmen des Vorgangs.
Um die obigen Zustände zu veranschaulichen, betrachten Sie die folgende Sequenz bei einem ProjFS-Anbieter, der über eine einzelne Datei "foo.txt" im Virtualisierungsstamm C:\root verfügt.
- Eine App listet C:\root auf. Die virtuelle Datei "foo.txt" wird angezeigt. Da auf die Datei noch nicht zugegriffen wurde, ist die Datei auf dem Datenträger nicht vorhanden.
- Die App öffnet ein Handle für C:\root\foo.txt. ProjFS weist den Anbieter an, einen Platzhalter dafür zu erstellen.
- Die App liest den Inhalt der Datei. Der Anbieter stellt den Dateiinhalt für ProjFS bereit und wird in C:\root\foo.txt zwischengespeichert. Die Datei ist jetzt ein aktivierter Platzhalter.
- Die App aktualisiert den Zeitstempel "Letzte Änderung". Die Datei ist jetzt ein modifiziert aktivierter Platzhalter.
- Die App öffnet ein Handle für den Schreibzugriff auf die Datei. C:\root\foo.txt ist jetzt eine vollständige Datei.
- Die App löscht C:\root\foo.txt. ProjFS ersetzt die Datei durch einen Tombstone. Wenn die App nun C:\root aufzählt, wird foo.txt nicht angezeigt. Wenn versucht wird, die Datei zu öffnen, schlägt das Öffnen mit ERROR_FILE_NOT_FOUND fehl.