Freigeben über


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 in einem von sechs Zuständen im lokalen Dateisystem befinden:

  • Virtuell

    Das Element ist nicht lokal auf dem Datenträger vorhanden. Es wird projiziert, d. h. synthetisiert, während Enumerationen des übergeordneten Verzeichnisses. Virtuelle Elemente werden mit allen Elementen zusammengeführt, die auf dem Datenträger vorhanden sein können, 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 nicht auf dem Datenträger vorhanden, d. h. sie sind weiterhin virtuell. Die Metadaten des Verzeichnisses (Name, Zeitstempel, Attribute usw.) werden auf dem Datenträger zwischengespeichert.

  • Hydratierter 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 hydratisierten Platzhalterverzeichnis. Dadurch kann der Anbieter Elemente aus dem Verzeichnis im Sicherungsspeicher hinzufügen oder entfernen und diese Änderungen im lokalen Cache anzeigen lassen.

  • Schmutziger Platzhalter (hydratisiert oder nicht)

    Die Metadaten des Elements wurden lokal geändert und sind im Speicher des Anbieters kein Cache des Zustands mehr. Beachten Sie, dass das Erstellen oder Löschen einer Datei oder eines Verzeichnisses unter einem Platzhalterverzeichnis dazu führt, dass das Platzhalterverzeichnis schmutzig wird.

  • Vollständige Datei/Verzeichnis

    Für Dateien: Der Inhalt der Datei (primärer Datenstrom) wurde geändert. Die Datei ist kein Cache des Zustands im Speicher des Anbieters mehr. Dateien, die im lokalen Dateisystem erstellt wurden (d. h., die überhaupt nicht im Speicher des Anbieters vorhanden sind) gelten auch als vollständige Dateien.

    Bei Verzeichnissen: Verzeichnisse, die im lokalen Dateisystem erstellt wurden (d. h., die überhaupt nicht im Speicher des Anbieters 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.

  • Grabstein

    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 der Gruppe der virtuellen projizierten Elemente zusammen. Wenn ein Element sowohl in den lokalen als auch in projizierten Sätzen angezeigt wird, hat das lokale Element Vorrang. Wenn im lokalen Dateisystem keine Datei vorhanden ist, gibt es keinen lokalen Zustand, sodass sie in der Enumeration angezeigt wird. Wenn dieses Element jedoch gelöscht wurde, wäre es unerwartet, wenn es in der Enumeration angezeigt wurde. Das Ersetzen eines gelöschten Elements durch einen Grabstein führt zu den folgenden Effekten:

    • Aufzählungen, um das Element nicht anzuzeigen.
    • Die Datei wird geöffnet, die erwartet, dass das Element vorhanden ist, schlägt fehl, z. B. "Datei nicht gefunden".
    • Die Datei erstellt, die nur erfolgreich ist, wenn das Element nicht vorhanden ist; ProjFS entfernt den Grabstein als Teil des Vorgangs.

Um die obigen Zustände zu veranschaulichen, berücksichtigen Sie die folgende Sequenz, wenn ein ProjFS-Anbieter über eine einzelne Datei "foo.txt" verfügt, die sich im Virtualisierungsstamm C befindet:\root.

  1. Eine App listet C:\root auf. Sie sieht die virtuelle Datei "foo.txt". Da auf die Datei noch nicht zugegriffen wurde, ist die Datei nicht auf dem Datenträger vorhanden.
  2. Die App öffnet ein Handle zum C:\root\foo.txt. ProjFS teilt dem Anbieter mit, einen Platzhalter dafür zu erstellen.
  3. Die App liest den Inhalt der Datei. Der Anbieter stellt den Dateiinhalt projFS bereit und wird in C:\root\foo.txtzwischengespeichert. Die Datei ist jetzt ein hydratisierter Platzhalter.
  4. Die App aktualisiert den Zeitstempel der letzten Änderung. Die Datei ist jetzt ein schmutziger hydratisierter Platzhalter.
  5. Die App öffnet ein Handle zum Schreiben des Zugriffs auf die Datei. C:\root\foo.txt ist jetzt eine vollständige Datei.
  6. Die App löscht C:\root\foo.txt. ProjFS ersetzt die Datei durch einen Grabstein. Wenn die App jetzt C:\root it does not see foo.txtaufzählt. Wenn versucht wird, die Datei zu öffnen, schlägt das Öffnen mit ERROR_FILE_NOT_FOUND fehl.