Anbieterübersicht
Der Anbieter ist eine Anwendung im Benutzermodus, die einen datenbasierten Speicher verwaltet und versteht. Der Anbieter implementiert ProjFS-Rückrufe und verwendet die ProjFS-API, um diesen Datenspeicher in das Dateisystem zu projizieren, wo er dem Benutzer als Dateien und Verzeichnisse angezeigt wird. Der Hintergrundspeicher des Anbieters kann lokal im System des Benutzers oder remote gespeichert sein.
Datenprojektion
Der Teil des Dateisystems, der dem Anbieter gehört, wo seine Daten projiziert werden, befindet sich in einem Verzeichnis, das als "Virtualisierungsstamm" bezeichnet wird. Wenn der Anbieter mit dem Projigen seiner Daten beginnen möchte, startet er eine "Virtualisierungsinstanz", bei der es sich um ein Objekt handelt, das die Kommunikation zwischen dem Anbieter und ProjFS für den Satz von Dateien und Verzeichnissen verwaltet, die sich unter einem bestimmten Virtualisierungsstamm befinden. Alle Dateien und Verzeichnisse, die Nachfolger des Virtualisierungsstamms sind und nicht lokal vom Benutzer erstellt wurden, werden vom Anbieter über die ProjFS-API materialisiert. Diese Elemente beginnen als virtuelle Dateien und Verzeichnisse, was bedeutet, dass sie nicht auf dem lokalen Speichergerät des Benutzers vorhanden sind, sondern von ProjFS in Enumerationsergebnisse eingefügt werden. Wenn die Elemente geöffnet und gelesen werden, ruft ProjFS Rückrufe auf, die vom Anbieter zum Anfordern von Daten implementiert wurden, und der Anbieter verwendet ProjFS-APIs, um diese Daten an den lokalen Speicher zu senden, wo sie für den nachfolgenden Zugriff zwischengespeichert werden. Wenn sich die Ansicht des Hintergrunddatenspeichers des Benutzers ändern muss, z. B. wenn sich der Inhalt des Datenspeichers geändert hat, kann der Anbieter ProjFS-APIs verwenden, um lokale Elemente zu aktualisieren oder zu löschen, um die neue Ansicht des Datenspeichers widerzubilden.
Rückrufrückrufcodes
Jeder Rückruf listet eine Reihe möglicher Rückgabewerte auf, die für diesen Rückruf spezifisch sind. Zusätzlich zu den Rückgabewerten, die für einen bestimmten Rückruf aufgeführt sind, kann ein Rückruf auch bestimmte andere Fehlercodes zurückgeben. Dies ist die vollständige Liste der Fehlercodes, die ein Rückruf zurückgeben kann:
| Fehlercode | Bedeutung |
|---|---|
| S_OK | Vorgang erfolgreich |
| E_OUTOFMEMORY | Fehler beim Zuordnen des erforderlichen Arbeitsspeichers. |
| HRESULT_FROM_WIN32(ERROR_IO_PENDING) | Der Anbieter möchte den Vorgang zu einem späteren Zeitpunkt abschließen. |
| HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) | Ein an einen Rückruf übergebener Puffer war zu klein. |
| HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) | Die Datei ist im Hintergrundspeicher des Anbieters nicht vorhanden. |
| HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER) | Ein Rückrufargument ist ungültig. Beispielsweise entspricht eine Enumerations-ID nicht einer aktiven Enumerationssitzung. |
| HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) | Der Anbieter möchte verhindern, dass ein Vorgang, z. B. ein Umbenennen oder Löschen, stattfindet. |
Rückrufe können auch Fehler zurückgeben, die sie von Aufrufen von ProjFS-APIs erhalten können. Wenn ein Rückruf einen Fehlercode zurückgibt, der nicht in der vorangehenden Liste enthalten ist oder nicht von einer ProjFS-API stammen, gibt ProjFS ihn als Fehlercode STATUS_INTERNAL_ERROR.