Panoramica del provider
Il provider è un'applicazione in modalità utente che gestisce e comprende un archivio dati di backup. Il provider implementa i callback di ProjFS e usa l'API ProjFS per proiettare l'archivio dati nel file system in cui viene visualizzato all'utente come file e directory. L'archivio di backup del provider può essere locale nel sistema dell'utente oppure può trovarsi in remoto.
Proiezione dati
La parte del file system proprietaria del provider, in cui i dati vengono proiettati, è radicata in una directory denominata "radice di virtualizzazione". Quando il provider vuole avviare il progetto dei dati, avvia un'istanza di "virtualizzazione", ovvero un oggetto che gestisce la comunicazione tra il provider e ProjFS per il set di file e directory che si trovano in una determinata radice di virtualizzazione. Tutti i file e le directory discendenti della radice di virtualizzazione che non sono stati creati localmente dall'utente vengono materializzati dal provider tramite l'API ProjFS. Questi elementi iniziano come file virtuali e directory, ovvero che non esistono nel dispositivo di archiviazione locale dell'utente, ma vengono inseriti nei risultati dell'enumerazione da ProjFS. Quando gli elementi vengono aperti e letti, ProjFS richiama i callback implementati dal provider per richiedere i dati e il provider usa le API ProjFS per inviare tali dati all'archiviazione locale in cui viene memorizzata nella cache per l'accesso successivo. Se la visualizzazione dell'archivio dati di backup dell'archivio dati di backup deve essere modificata, ad esempio se il contenuto dell'archivio dati è stato modificato, il provider può usare le API ProjFS per aggiornare o eliminare elementi locali per riflettere la nuova visualizzazione dell'archivio dati.
Codici restituiti di callback
Ogni callback elenca un numero di possibili valori restituiti specifici del callback. Oltre ai valori restituiti elencati per un callback specificato, un callback può restituire anche alcuni altri codici di errore. Questo è l'elenco completo dei codici di errore che un callback può restituire:
Codice di errore | Significato |
---|---|
S_OK | Operazione riuscita |
E_OUTOFMEMORY | Impossibile allocare la memoria necessaria. |
HRESULT_FROM_WIN32(ERROR_IO_PENDING) | Il provider vuole completare l'operazione in un secondo momento. |
HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) | Un buffer passato a un callback era troppo piccolo. |
HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) | Il file non esiste nell'archivio di backup del provider. |
HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER) | Un argomento di callback non è valido. Ad esempio, un ID di enumerazione non corrisponde a una sessione di enumerazione attiva. |
HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) | Il provider vuole impedire l'esecuzione di un'operazione, ad esempio una ridenominazione o un'eliminazione. |
I callback possono anche restituire eventuali errori che possono ricevere dalle chiamate alle API ProjFS. Se un callback restituisce un codice di errore non presente nell'elenco precedente o che non proviene da un'API ProjFS, ProjFS lo restituirà al file system come STATUS_INTERNAL_ERROR.