Fonction CfConvertToPlaceholder (cfapi.h)

Convertit un fichier ou un répertoire sans espace réservé existant dans une arborescence de répertoire racine de synchronisation en espace réservé. Cela est utile, par exemple, lorsqu’un nouveau fichier ou répertoire local s’affiche sur un client et que le fournisseur de synchronisation a terminé sa synchronisation avec le cloud. Notez qu’il n’existe aucun paramètre pour la transmission des métadonnées du système de fichiers (horodatages, taille de fichier, etc.) ; celles-ci sont extraites textuellement du fichier local.

Syntaxe

HRESULT CfConvertToPlaceholder(
  [in]                HANDLE           FileHandle,
  [in, optional]      LPCVOID          FileIdentity,
  [in]                DWORD            FileIdentityLength,
  [in]                CF_CONVERT_FLAGS ConvertFlags,
  [out, optional]     USN              *ConvertUsn,
  [in, out, optional] LPOVERLAPPED     Overlapped
);

Paramètres

[in] FileHandle

Gérez le fichier ou le répertoire à convertir.

[in, optional] FileIdentity

Mémoire tampon en mode utilisateur qui contient les informations de fichier ou de répertoire opaques fournies par l’appelant. Facultatif si l’appelant ne déshydrat pas le fichier en même temps ou si l’appelant convertit un répertoire. FileIdentity est renvoyé au fournisseur de synchronisation dans tous les rappels. Ne peut pas dépasser 4 Ko.

[in] FileIdentityLength

Longueur, en octets, de FileIdentity.

[in] ConvertFlags

Indicateurs de conversion d’espace réservé. ConvertFlags peut être défini sur les valeurs suivantes :

Indicateur Description
CF_CONVERT_FLAG_MARK_IN_SYNC Si cela est spécifié, la plateforme marque l’espace réservé converti comme étant synchronisé avec le cloud lors d’une conversion réussie du fichier.
CF_CONVERT_FLAG_DEHYDRATE Cela s’applique uniquement aux fichiers. Lorsqu’elle est spécifiée, la plateforme déshydrate le fichier après l’avoir converti en espace réservé. L’appelant doit acquérir un handle exclusif lors de la spécification de cet indicateur ou des altérations de données peuvent se produire. Notez que la plateforme ne valide pas l’exclusivité du handle.
CF_CONVERT_FLAG_ENABLE_ON_DEMAND_POPULATION Cela s’applique uniquement aux répertoires. Lorsqu’il est spécifié, il marque le répertoire d’espace réservé converti partiellement rempli de sorte que tout accès futur à celui-ci entraîne un rappel FETCH_PLACEHOLDERS envoyé au fournisseur de synchronisation.
CF_CONVERT_FLAG_ALWAYS_FULL Cela s’applique uniquement aux fichiers d’espace réservé. Une fois qu’un fichier est converti en espace réservé avec cet indicateur, l’espace réservé est toujours marqué plein. Toute tentative de déshydrater un tel espace réservé échoue avec le code d’erreur ERROR_CLOUD_FILE_DEHYDRATION_DISALLOWED.
CF_CONVERT_FLAG_FORCE_CONVERT_TO_CLOUD_FILE Lorsqu’elle est spécifiée, la plateforme permet à un moteur de synchronisation de convertir atomiquement un espace réservé de fichiers non cloud (avec une autre balise/données d’analyse) en espace réservé de fichiers cloud. Notez que l’API échoue normalement à convertir tout fichier sans espace réservé en espace réservé.

Combinaison (CF_CONVERT_FLAG_FORCE_CONVERT_TO_CLOUD_FILE | CF_CONVERT_FLAG_DEHYDRATE) est particulièrement utile dans les scénarios de migration lorsque certains fournisseurs migrent d’une autre plateforme vers une plateforme de fichiers cloud et qu’ils ont l’intention de convertir atomiquement des espaces réservés hydratés sur l’ancienne plateforme en espaces réservés déshydratés sur la plateforme de fichiers cloud. Seul cet indicateur doit être passé pour convertir des espaces réservés complets en espaces réservés de fichiers cloud. Si l’ancienne plateforme implémente des fichiers complets en tant que fichiers ordinaires non réservés, cet indicateur n’est pas nécessaire. La transmission de cet indicateur sur un répertoire convertit également les répertoires en fichiers cloud, bien que l’indicateur DEHYDRATE ne s’applique pas aux répertoires.

Même lorsque la stratégie CF_PLACEHOLDER_MANAGEMENT_POLICY_CONVERT_TO_UNRESTRICTED a été spécifiée avec CfRegisterSyncRoot, seuls les processus inscrits/connectés à la racine de synchronisation des fichiers cloud sont autorisés à spécifier cet indicateur.

Note: L’indicateur est pris en charge uniquement si le PlatformVersion.IntegrationNumber obtenu à partir de CfGetPlatformInfo est 0x500 ou supérieur.

[out, optional] ConvertUsn

Lorsqu’elle est spécifiée, il s’agit de la valeur USN finale après l’exécution des actions de conversion.

[in, out, optional] Overlapped

Lorsqu’il est spécifié et combiné avec un FileHandle asynchrone, le chevauchement permet à la plateforme d’effectuer l’appel CfConvertToPlaceholder de manière asynchrone. Pour plus d’informations, consultez les remarques .

Si ce n’est pas spécifié, la plateforme effectue l’appel d’API de manière synchrone, quelle que soit la façon dont le handle a été créé.

Valeur retournée

Si cette fonction réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT.

Remarques

Dans le cas du fichier, l’appelant doit acquérir un handle exclusif pour le fichier s’il a également l’intention de déshydrater le fichier en même temps, sinon une altération des données peut se produire. Pour réduire l’impact sur les applications utilisateur, il est vivement recommandé que l’appelant obtienne l’exclusivité en utilisant des oplocks appropriés (via CfOpenFileWithOplock) au lieu d’utiliser un handle de partage sans partage.

Pour convertir un espace réservé :

  • Le fichier ou le répertoire à convertir doit être contenu dans une arborescence racine de synchronisation inscrite ; il peut s’agir du répertoire racine de synchronisation lui-même ou d’un répertoire descendant ; sinon, l’appel avec a échoué avec HRESULT(ERROR_CLOUD_FILE_NOT_UNDER_SYNC_ROOT).
  • Si la déshydratation est demandée, la racine de synchronisation doit être inscrite avec une stratégie d’hydratation valide qui n’est pas CF_HYDRATION_POLICY_ALWAYS_FULL ; sinon, l’appel échoue avec HRESULT(ERROR_CLOUD_FILE_NOT_SUPPORTED).
  • Si la déshydratation est demandée, l’espace réservé ne doit pas être épinglé localement ou l’appel avec a échoué avec HRESULT(ERROR_CLOUD_FILE_PINNED).
  • Si la déshydratation est demandée, l’espace réservé doit être synchronisé ou l’appel avec a échoué avec HRESULT(ERROR_CLOUD_FILE_NOT_IN_SYNC).
  • L’appelant doit disposer d’un accès WRITE_DATA ou WRITE_DAC au fichier ou au répertoire à convertir. Sinon, l’opération échoue avec HRESULT(ERROR_CLOUD_FILE_ACCESS_DENIED).

Si l’API retourne HRESULT_FROM_WIN32(ERROR_IO_PENDING) lors de l’utilisation du chevauchement asynchrone, l’appelant peut attendre à l’aide de GetOverlappedResult.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10, version 1709 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2016 (applications de bureau uniquement)
Plateforme cible Windows
En-tête cfapi.h
Bibliothèque CldApi.lib
DLL CldApi.dll

Voir aussi

CfOpenFileWithOplock

GetOverlappedResult