Condividi tramite


Funzione CfConvertToPlaceholder (cfapi.h)

Converte un file o una directory non segnaposto esistente in un albero della directory radice di sincronizzazione in un segnaposto. Ciò è utile, ad esempio, dopo la visualizzazione di un nuovo file o directory locale in un client e il provider di sincronizzazione ha terminato la sincronizzazione con il cloud. Si noti che non esistono parametri per passare i metadati del file system (timestamp, dimensioni del file e così via); vengono presi verbatim dal file locale.

Sintassi

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
);

Parametri

[in] FileHandle

Handle nel file o nella directory da convertire.

[in, optional] FileIdentity

Buffer in modalità utente che contiene il file opaco o le informazioni sulla directory fornite dal chiamante. Facoltativo se il chiamante non sta disidratando il file contemporaneamente o se il chiamante converte una directory. FileIdentity viene restituito al provider di sincronizzazione in tutti i callback. Non può superare le dimensioni di 4 KB.

[in] FileIdentityLength

Lunghezza, in byte, di FileIdentity.

[in] ConvertFlags

Flag di conversione segnaposto. ConvertFlags può essere impostato sui valori seguenti:

Flag Descrizione
CF_CONVERT_FLAG_MARK_IN_SYNC Se questo valore viene specificato, la piattaforma contrassegna il segnaposto convertito come sincronizzato con il cloud in seguito a una conversione corretta del file.
CF_CONVERT_FLAG_DEHYDRATE Questa opzione è applicabile solo per i file. Se specificata, la piattaforma disidrata il file dopo la conversione in un segnaposto. Il chiamante deve acquisire un handle esclusivo quando si specifica questo flag o i danneggiamenti dei dati possono verificarsi. Si noti che la piattaforma non convalida l'esclusività dell'handle.
CF_CONVERT_FLAG_ENABLE_ON_DEMAND_POPULATION Questa opzione è applicabile solo alle directory. Se specificato, contrassegna la directory segnaposto convertita parzialmente popolata in modo che qualsiasi accesso futuro a tale directory provocherà un callback FETCH_PLACEHOLDERS inviato al provider di sincronizzazione.
CF_CONVERT_FLAG_ALWAYS_FULL Questa opzione è valida solo per i file segnaposto. Una volta convertito un file in un segnaposto con questo flag, il segnaposto viene contrassegnato sempre completo. Qualsiasi tentativo di disidratare tale segnaposto avrà esito negativo con codice di errore ERROR_CLOUD_FILE_DEHYDRATION_DISALLOWED.
CF_CONVERT_FLAG_FORCE_CONVERT_TO_CLOUD_FILE Se specificata, la piattaforma consente a un motore di sincronizzazione di convertire in modo atomico un segnaposto di file non cloud (con un altro tag/dati di analisi) in un segnaposto di file cloud. Si noti che l'API in genere non riesce la conversione di qualsiasi file non segnaposto in un segnaposto.

Combinazione (CF_CONVERT_FLAG_FORCE_CONVERT_TO_CLOUD_FILE | CF_CONVERT_FLAG_DEHYDRATE) è particolarmente utile negli scenari di migrazione quando determinati provider eseguono la migrazione da un'altra piattaforma a una piattaforma di file cloud e intendono convertire i segnaposto idratati nella piattaforma precedente in segnaposto disidratati nella piattaforma di file cloud in modo atomico. Solo questo flag deve essere passato per la conversione dei segnaposto completi nei segnaposto dei file cloud. Se la piattaforma precedente implementa file completi come normali file non segnaposto, questo flag non è necessario. Il passaggio di questo flag in una directory converte anche le directory in file cloud, anche se il flag DEHYDRATE non si applica alle directory.

Anche quando il criterio CF_PLACEHOLDER_MANAGEMENT_POLICY_CONVERT_TO_UNRESTRICTED è stato specificato con CfRegisterSyncRoot, solo i processi registrati/connessi alla radice di sincronizzazione dei file cloud sono autorizzati a specificare questo flag.

Nota: Il flag è supportato solo se l'oggetto PlatformVersion.IntegrationNumber ottenuto da CfGetPlatformInfo è 0x500 o superiore.

[out, optional] ConvertUsn

Se specificato, questo è il valore USN finale dopo l'esecuzione delle azioni di conversione.

[in, out, optional] Overlapped

Se specificato e combinato con un oggetto FileHandle asincrono, Overlapped consente alla piattaforma di eseguire la chiamata CfConvertToPlaceholder in modo asincrono. Per altri dettagli, vedere la sezione Osservazioni .

Se non specificato, la piattaforma eseguirà la chiamata API in modo sincrono, indipendentemente dalla modalità di creazione dell'handle.

Valore restituito

Se questa funzione ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT .

Commenti

Nel caso di file, il chiamante deve acquisire un handle esclusivo per il file se intende anche disidratare il file contemporaneamente o il danneggiamento dei dati. Per ridurre al minimo l'impatto sulle applicazioni utente, è consigliabile che il chiamante ottenga l'esclusività usando oplock appropriati (tramite CfOpenFileWithOplock) anziché usare un handle di condivisione-nothing.

Per convertire un segnaposto:

  • Il file o la directory da convertire devono essere contenuti in un albero radice di sincronizzazione registrato; può essere la directory radice di sincronizzazione stessa o qualsiasi directory discendente; in caso contrario, la chiamata con non è riuscita con HRESULT(ERROR_CLOUD_FILE_NOT_UNDER_SYNC_ROOT).
  • Se è richiesta la disidratazione, la radice di sincronizzazione deve essere registrata con un criterio di idratazione valido che non è CF_HYDRATION_POLICY_ALWAYS_FULL; in caso contrario, la chiamata non riesce con HRESULT(ERROR_CLOUD_FILE_NOT_SUPPORTED).
  • Se è richiesta la disidratazione, il segnaposto non deve essere aggiunto in locale o la chiamata con non è riuscita con HRESULT(ERROR_CLOUD_FILE_PINNED).
  • Se è richiesta la disidratazione, il segnaposto deve essere sincronizzato o la chiamata con non è riuscita con HRESULT(ERROR_CLOUD_FILE_NOT_IN_SYNC).
  • Il chiamante deve avere WRITE_DATA o WRITE_DAC l'accesso al file o alla directory da convertire. In caso contrario, l'operazione non sarà riuscita con HRESULT(ERROR_CLOUD_FILE_ACCESS_DENIED).

Se l'API restituisce HRESULT_FROM_WIN32(ERROR_IO_PENDING) quando si usa Sovrapposizione in modo asincrono, il chiamante può attendere usando GetOverlappedResult.

Requisiti

Requisito Valore
Client minimo supportato Windows 10 versione 1709 [solo app desktop]
Server minimo supportato Windows Server 2016 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione cfapi.h
Libreria CldApi.lib
DLL CldApi.dll

Vedi anche

CfOpenFileWithOplock

GetOverlappedResult