Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 para o fluxo de dados no qual gravar.
Se o provedor estiver atendendo 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.
Valor de retorno
HRESULT_FROM_WIN32(ERROR_OFFSET_ALIGNMENT_VIOLATION) indica que o identificador do usuário foi aberto para E/S não permitido e byteOffset não está alinhado ao tamanho do setor do dispositivo de armazenamento.
Observações
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 esse FILE_OBJECT foi aberto para E/S em buffer ou não. Se a FILE_OBJECT tiver sido aberta para E/S não armazenada, as leituras e gravações no arquivo deverão seguir 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 comprimento 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 PrjGetVirtualizationInstanceInstanceInfo para recuperar o requisito de alinhamento do dispositivo de armazenamento.
O sistema deixa o provedor para calcular o alinhamento adequado porque, ao processar um retorno de chamada PRJ_GET_FILE_DATA_CB , 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 a 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 E/S não armazenada em buffer.
Requirements
| Requirement | Value |
|---|---|
| Cliente mínimo suportado | Windows 10, versão 1809 [somente aplicativos da área de trabalho] |
| Servidor mínimo compatível | Windows Server [somente aplicativos da área de trabalho] |
| da Plataforma de Destino |
Windows |
| Header | projectedfslib.h |
| Library | ProjectedFSLib.lib |