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 |