Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Anbieteranwendung verwaltet eine oder mehrere Virtualisierungsinstanzen. Jede Virtualisierungsinstanz durchläuft vier Phasen im Lebenszyklus:
- Kreation
- Start
- Laufzeit
- Herunterfahren
Beachten Sie, dass der Anbieter nach dem Herunterfahren einer Virtualisierungsinstanz sie nicht erneut erstellen muss, um sie wiederzuverwenden. Sie kann es einfach erneut starten.
Hinweis: Dieser Abschnitt zeigt Beispiele für ProjFS-APIs. Jedes Beispiel soll die grundlegende API-Verwendung veranschaulichen. Eine Dokumentation der in diesen Beispielen nicht verwendeten Optionen finden Sie in der ProjFS-API-Referenz.
Erstellen eines Virtualisierungsstamms
Bevor ein Anbieter die Virtualisierungsinstanz starten kann, die Elemente in das lokale Dateisystem projiziert, muss er den Virtualisierungsstamm erstellen. Der Virtualisierungsstamm ist das Verzeichnis, unter dem der Anbieter eine Struktur von Verzeichnissen und Dateien projiziert.
Zum Erstellen eines Virtualisierungsstamms muss der Anbieter Folgendes ausführen:
Erstellen Sie ein Verzeichnis, das als Virtualisierungsstamm dient.
Der Anbieter erstellt ein Verzeichnis, das als Virtualisierungsstamm dient, z. B. CreateDirectory:
HRESULT hr; const wchar_t* rootName = LR"(C:\virtRoot)"; if (!CreateDirectoryW(rootName, nullptr)) { hr = HRESULT_FROM_WIN32(GetLastError()); wprintf(L"Failed to create virtualization root (0x%08x)\n", hr); return; }Erstellen Sie eine Virtualisierungsinstanz-ID.
Jede Virtualisierungsinstanz verfügt über eine eindeutige ID namens Virtualisierungsinstanz-ID. Das System verwendet diesen Wert, um zu ermitteln, welcher Virtualisierungsinstanz seine Inhalte zugeordnet sind.
GUID instanceId; hr = CoCreateGuid(&instanceId); if (FAILED(hr)) { wprintf(L"Failed to create instance ID (0x%08x)\n", hr); return; }Markieren Sie das neue Verzeichnis als Virtualisierungsstamm.
Der Anbieter ruft PrjMarkDirectoryAsPlaceholder auf, um das neue Verzeichnis als Virtualisierungsstamm zu markieren und der Virtualisierungsinstanz zuzuweisen.
hr = PrjMarkDirectoryAsPlaceholder(rootName, nullptr, nullptr, &instanceId); if (FAILED(hr)) { wprintf(L"Failed to mark virtualization root (0x%08x)\n", hr); return; }
Der Anbieter muss den Virtualisierungsstamm nur einmal für jede Virtualisierungsinstanz erstellen. Nachdem ein Stamm erstellt wurde, kann die zugehörige Instanz wiederholt gestartet und beendet werden, ohne den Stamm neu zu erstellen.
Starten einer Virtualisierungsinstanz
Nachdem der Virtualisierungsstamm erstellt wurde, muss der Anbieter die Virtualisierungsinstanz starten. Dies signalisiert ProjFS, dass der Anbieter bereit ist, Rückrufe zu empfangen und Daten bereitzustellen.
So starten Sie die Virtualisierungsinstanz, die der Anbieter muss:
Richten Sie die Rückruftabelle ein.
ProjFS kommuniziert mit dem Anbieter, indem Rückrufroutinen aufgerufen werden, die vom Anbieter implementiert werden. Der Anbieter füllt eine PRJ_CALLBACKS Struktur mit Zeigern auf die Rückrufroutinen auf.
PRJ_CALLBACKS callbackTable; // Supply required callbacks. callbackTable.StartDirectoryEnumerationCallback = MyStartEnumCallback; callbackTable.EndDirectoryEnumerationCallback = MyEndEnumCallback; callbackTable.GetDirectoryEnumerationCallback = MyGetEnumCallback; callbackTable.GetPlaceholderInfoCallback = MyGetPlaceholderInfoCallback; callbackTable.GetFileDataCallback = MyGetFileDataCallback; // The rest of the callbacks are optional. callbackTable.QueryFileNameCallback = nullptr; callbackTable.NotificationCallback = nullptr; callbackTable.CancelCommandCallback = nullptr;Starten Sie die Instanz.
Der Anbieter ruft PrjStartVirtualizing auf, um die Virtualisierungsinstanz zu starten.
PRJ_NAMESPACE_VIRTUALIZATION_CONTEXT instanceHandle; hr = PrjStartVirtualizing(rootName, &callbackTable, nullptr, nullptr, &instanceHandle); if (FAILED(hr)) { wprintf(L"Failed to start the virtualization instance (0x%08x)\n", hr); return; }PrjStartVirtualizing's instanceHandle Parameter gibt ein Handle an die Virtualisierungsinstanz zurück. Der Anbieter verwendet dieses Handle beim Aufrufen anderer ProjFS-APIs.
Virtualisierungsinstanzlaufzeit
Sobald der Aufruf von PrjStartVirtualizing zurückgegeben wird, ruft ProjFS die Rückrufroutinen des Anbieters als Reaktion auf Dateisystemvorgänge in der Virtualisierungsinstanz auf. Informationen dazu, wie der Anbieter verschiedene Dateisystemvorgänge verarbeiten kann, finden Sie in den folgenden Abschnitten:
- Aufzählen von Dateien und Verzeichnissen
- Bereitstellen von Dateidaten
- Benachrichtigungen über Dateisystemvorgänge
- Behandeln von Ansichtsänderungen
Herunterfahren einer Virtualisierungsinstanz
Um ProjFS zu signalisieren, dass der Anbieter den Empfang von Rückrufen und die Bereitstellung von Daten beenden möchte, muss der Anbieter die Virtualisierungsinstanz beenden. Dazu ruft der Anbieter PrjStopVirtualizingauf und übergibt es an die Virtualisierungsinstanz, die er vom Aufruf an PrjStartVirtualizingempfangen hat.
PrjStopVirtualizing(instanceHandle);
Beachten Sie, dass ProjFS möglicherweise weiterhin die Rückrufroutinen des Anbieters aufruft, bis dieser Aufruf zurückgibt.