Compartilhar via


Função CfCreatePlaceholders (cfapi.h)

Cria um ou mais novos arquivos de espaço reservado ou diretórios em uma árvore de diretório raiz de sincronização.

Sintaxe

HRESULT CfCreatePlaceholders(
  [in]      LPCWSTR                    BaseDirectoryPath,
  [in, out] CF_PLACEHOLDER_CREATE_INFO *PlaceholderArray,
  [in]      DWORD                      PlaceholderCount,
  [in]      CF_CREATE_FLAGS            CreateFlags,
  [out]     PDWORD                     EntriesProcessed
);

Parâmetros

[in] BaseDirectoryPath

Caminho para o diretório local no qual os espaços reservados são criados. Tenha o seguinte em mente ao especificar o caminho:

  • Esse caminho deve estar contido em uma árvore raiz de sincronização registrada. Pode ser o próprio diretório raiz de sincronização ou qualquer diretório descendente. Caso contrário, a chamada falhará com STATUS_CLOUD_FILE_NOT_UNDER_SYNC_ROOT.
  • A raiz de sincronização deve ser registrada com uma política de hidratação válida que não seja CF_HYDRATION_POLICY_ALWAYS_FULL, caso contrário, a chamada falhará com STATUS_CLOUD_FILE_NOT_SUPPORTED.
  • O chamador deve ter acesso WRITE_DATA ou WRITE_DAC ao diretório base no qual o espaço reservado está prestes a ser criado. Caso contrário, a operação falhará com STATUS_CLOUD_FILE_ACCESS_DENIED.

[in, out] PlaceholderArray

Na criação bem-sucedida, o PlaceholderArray contém o valor final de USN e uma STATUS_OK mensagem. No retorno, essa matriz contém um valor HRESULT que descreve se o espaço reservado foi criado ou não. PlaceholderArray aponta para uma matriz de espaços reservados a serem criados, em relação a BaseDirectoryPath. Cada entrada na matriz inclui os seguintes campos:

  • RelativeFileName é o nome do espaço reservado filho, arquivo e diretório, a ser criado.
  • FsMetadata contém metadados do sistema de arquivos sobre o espaço reservado a ser criado, incluindo todos os carimbos de data/hora, atributos de arquivo e tamanho do arquivo (opcional para diretórios).
  • FileIdentity e FileIdentityLength descrevem um buffer de modo de usuário que contém as informações opacas de arquivo fornecidas pelo provedor de sincronização. O blob FileIdentity não deve exceder CF_PLACEHOLDER_MAX_FILE_IDENTITY_LENGTH (definido como 4 KB) de tamanho. FileIdentity é passado de volta para o provedor de sincronização em todos os retornos de chamada. Esse é um campo obrigatório para arquivos.

Um provedor de sincronização pode escolher os seguintes sinalizadores ou uma combinação deles por espaço reservado:

  • CF_PLACEHOLDER_CREATE_FLAG_DISABLE_ON_DEMAND_POPULATION - Esse sinalizador é aplicável somente a um diretório de espaço reservado filho. Quando o sinalizador estiver presente, o diretório de espaço reservado filho recém-criado será considerado com todos os seus filhos presentes localmente, portanto, acessá-lo no futuro não disparará nenhum retorno de chamada FETCH_PLACEHOLDERS nele. Quando o sinalizador estiver ausente, o diretório de espaço reservado recém-criado será considerado parcial e o acesso futuro disparará FETCH_PLACEHOLDERS.
  • CF_PLACEHOLDER_CREATE_FLAG_MARK_IN_SYNC – esse sinalizador é aplicável a arquivos de espaço reservado e diretórios. Quando esse sinalizador estiver presente, o espaço reservado recém-criado será marcado como em sincronia como parte da operação de TRANSFER_PLACEHOLDERS .
  • CF_PLACEHOLDER_CREATE_FLAG_ALWAYS_FULL – esse sinalizador é imposto somente em um arquivo de espaço reservado. Ele pode ser definido em um diretório de espaço reservado, mas não tem efeito. Quando esse sinalizador estiver presente, o espaço reservado recém-criado será marcado como sempre cheio. Depois de hidratado, qualquer tentativa de desidratar esse espaço reservado de arquivo falhará com o código de erro ERROR_CLOUD_FILE_DEHYDRATION_DISALLOWED.

[in] PlaceholderCount

A contagem de espaços reservados no PlaceholderArray.

[in] CreateFlags

Sinalizadores para configurar a criação de um espaço reservado. CreateFlags pode ser definido com os seguintes valores:

  • CF_CREATE_FLAG_NONE é o modo padrão em que a API processa todas as entradas na matriz mesmo quando erros são encontrados.
  • CF_CREATE_FLAG_STOP_ON_ERROR faz com que a API retorne imediatamente se a criação de um espaço reservado falhar. Nesse caso, a API retorna o código de falha.

[out] EntriesProcessed

O número de entradas processadas, incluindo entradas com falha. Se CF_CREATE_FLAG_STOP_ON_ERROR não tiver sido especificado em CreateFlags, a API retornará o primeiro código de falha encontrado, mas continuará processando o maior número possível de entradas; o chamador deve inspecionar a matriz para ver qual(s) criação(s) de espaço reservado falhou.

Retornar valor

Se essa função for bem-sucedida, ela retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT.

Comentários

É preferível criar um espaço reservado com essa função em comparação com a criação de um novo arquivo com CreateFile e convertê-lo em um espaço reservado com CfConvertToPlaceholder; para eficiência e porque elimina a janela de tempo em que o arquivo não é um espaço reservado. A função também pode criar vários arquivos ou diretórios em um lote, o que também pode ser mais eficiente.

Essa função é útil ao executar uma sincronização inicial de arquivos ou diretórios da nuvem até o cliente ou ao sincronizar um arquivo ou diretório único recém-criado da nuvem.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10, versão 1709 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2016 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho cfapi.h
Biblioteca CldApi.lib
DLL CldApi.dll

Confira também

CreateFile

CfConvertToPlaceholder