Vue d’ensemble du fournisseur

Le fournisseur est une application en mode utilisateur qui gère et comprend un magasin de données de stockage. Le fournisseur implémente les rappels ProjFS et utilise l’API ProjFS pour projeter ce magasin de données dans le système de fichiers où il apparaît à l’utilisateur sous forme de fichiers et de répertoires. Le magasin de stockage du fournisseur peut être local sur le système de l’utilisateur ou se trouver à distance.

Projection de données

La partie du système de fichiers dont le fournisseur est propriétaire, où ses données sont projetées, est enracinée dans un répertoire appelé « racine de virtualisation ». Lorsque le fournisseur souhaite commencer à projeter ses données, il démarre une « instance de virtualisation », qui est un objet qui gère la communication entre le fournisseur et ProjFS pour l’ensemble de fichiers et de répertoires situés sous une racine de virtualisation particulière. Tous les fichiers et répertoires qui sont des descendants de la racine de virtualisation qui n’ont pas été créés localement par l’utilisateur sont matérialisés par le fournisseur via l’API ProjFS. Ces éléments commencent par des fichiers virtuels et des répertoires, ce qui signifie qu’ils n’existent pas sur l’appareil de stockage local de l’utilisateur, mais qu’ils sont injectés dans les résultats d’énumération par ProjFS. Lorsque les éléments sont ouverts et lus, ProjFS appelle les rappels implémentés par le fournisseur pour demander des données, et le fournisseur utilise les API ProjFS pour envoyer ces données au stockage local où elles sont mises en cache pour un accès ultérieur. Si l’affichage de l’utilisateur du magasin de données de stockage doit changer, pour instance si le contenu du magasin de données a changé, le fournisseur peut utiliser les API ProjFS pour mettre à jour ou supprimer des éléments locaux afin de refléter la nouvelle vue du magasin de données.

Codes de retour de rappel

Chaque rappel répertorie un certain nombre de valeurs de retour possibles spécifiques à ce rappel. En plus des valeurs de retour répertoriées pour un rappel donné, un rappel peut également renvoyer certains autres codes d’erreur. Voici la liste complète des codes d’erreur qu’un rappel peut retourner :

Code d'erreur Signification
S_OK Opération réussie
E_OUTOFMEMORY Impossible d’allouer la mémoire nécessaire.
HRESULT_FROM_WIN32(ERROR_IO_PENDING) Le fournisseur souhaite terminer l’opération ultérieurement.
HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) Une mémoire tampon passée à un rappel était trop petite.
HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) Le fichier n’existe pas dans le magasin de stockage du fournisseur.
HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER) Un argument de rappel n’est pas valide. Par exemple, un ID d’énumération ne correspond pas à une session d’énumération active.
HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) Le fournisseur souhaite empêcher une opération, telle qu’un renommage ou une suppression, de se produire.

Les rappels peuvent également renvoyer toutes les erreurs qu’ils peuvent recevoir des appels aux API ProjFS. Si un rappel retourne un code d’erreur qui ne figure pas dans la liste précédente ou qui ne provient pas d’une API ProjFS, ProjFS le retourne au système de fichiers en tant que STATUS_INTERNAL_ERROR.