Compartilhar via


Função PrjWriteFileData (projectedfslib.h)

Fornece os dados solicitados em uma invocação do retorno de chamada PRJ_GET_FILE_DATA_CB .

Sintaxe

HRESULT PrjWriteFileData(
  [in] PRJ_NAMESPACE_VIRTUALIZATION_CONTEXT namespaceVirtualizationContext,
  [in] const GUID                           *dataStreamId,
  [in] void                                 *buffer,
  [in] UINT64                               byteOffset,
  [in] UINT32                               length
);

Parâmetros

[in] namespaceVirtualizationContext

Identificador opaco para a instância de virtualização.

Se o provedor estiver atendendo a um retorno de chamada PRJ_GET_FILE_DATA_CB, esse deverá ser o valor do membro VirtualizationInstanceHandle do callbackData passado para o provedor no retorno de chamada.

[in] dataStreamId

Identificador do fluxo de dados no qual gravar.

Se o provedor estiver atendendo a um PRJ_GET_FILE_DATA_CB retorno de chamada, esse deverá ser o valor do membro DataStreamId do callbackData passado para o provedor no retorno de chamada.

[in] buffer

Ponteiro para um buffer que contém os dados a serem gravados. O buffer deve ser pelo menos tão grande quanto o valor do parâmetro de comprimento em bytes. O provedor deve usar PrjAllocateAlignedBuffer para garantir que o buffer atenda aos requisitos de alinhamento do dispositivo de armazenamento.

[in] byteOffset

Deslocamento de bytes do início do arquivo no qual gravar os dados.

[in] length

O número de bytes a serem gravados no arquivo.

Retornar valor

HRESULT_FROM_WIN32(ERROR_OFFSET_ALIGNMENT_VIOLATION) indica que o identificador do usuário foi aberto para E/S não armazenada em buffer e byteOffset não está alinhado ao tamanho do setor do dispositivo de armazenamento.

Comentários

O provedor usa essa rotina para fornecer os dados solicitados em uma invocação de seu retorno de chamada PRJ_GET_FILE_DATA_CB .

O retorno de chamada PRJ_GET_FILE_DATA_CB do provedor é invocado quando o sistema precisa garantir que um arquivo contenha dados. Quando o provedor chama PrjWriteFileData para fornecer os dados solicitados, o sistema usa o FILE_OBJECT do usuário para gravar esses dados no arquivo. No entanto, o sistema não pode controlar se essa FILE_OBJECT foi aberta para E/S armazenada em buffer ou não. Se o FILE_OBJECT foi aberto para E/S não armazenada em buffer, as leituras e gravações no arquivo deverão aderir a determinados requisitos de alinhamento. O provedor pode atender a esses requisitos de alinhamento fazendo duas coisas:

  • Use PrjAllocateAlignedBuffer para alocar o buffer a ser passado para o buffer.
  • Verifique se byteOffset e length são múltiplos inteiros do requisito de alinhamento do dispositivo de armazenamento (o comprimento não precisa atender a esse requisito se byteOffset + length for igual ao final do arquivo). O provedor pode usar PrjGetVirtualizationInstanceInfo para recuperar o requisito de alinhamento do dispositivo de armazenamento.

O sistema deixa o provedor calcular o alinhamento adequado porque, ao processar uma PRJ_GET_FILE_DATA_CB retorno de chamada, o provedor pode optar por retornar os dados solicitados em várias chamadas PrjWriteFileData , cada uma retornando parte do total de dados solicitados.

Observe que, se o provedor vai gravar o arquivo inteiro em uma única chamada para PrjWriteFileData, ou seja, de byteOffset = 0 para length = tamanho do arquivo, o provedor não precisa fazer nenhum cálculo de alinhamento. No entanto, ele ainda deve usar PrjAllocateAlignedBuffer para garantir que o buffer atenda aos requisitos de alinhamento do dispositivo de armazenamento. Consulte o tópico Buffer de Arquivos para obter mais informações sobre E/S em buffer versus não armazenada em buffer.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10, versão 1809 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho projectedfslib.h