Condividi tramite


Funzione PrjWriteFileData (projectedfslib.h)

Fornisce i dati richiesti in una chiamata del callback PRJ_GET_FILE_DATA_CB.

Sintassi

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

Parametri

[in] namespaceVirtualizationContext

Handle opaco per l'istanza di virtualizzazione.

Se il provider esegue la manutenzione di un callback PRJ_GET_FILE_DATA_CB , questo deve essere il valore del membro VirtualizationInstanceHandle del callbackData passato al provider nel callback.

[in] dataStreamId

Identificatore del flusso di dati da scrivere in.

Se il provider esegue la manutenzione di un callback PRJ_GET_FILE_DATA_CB , questo deve essere il valore del membro DataStreamId del callbackData passato al provider nel callback.

[in] buffer

Puntatore a un buffer contenente i dati da scrivere. Il buffer deve essere almeno maggiore del valore del parametro di lunghezza in byte. Il provider deve usare PrjAllocateAlignedBuffer per assicurarsi che il buffer soddisfi i requisiti di allineamento del dispositivo di archiviazione.

[in] byteOffset

Offset di byte dall'inizio del file in cui scrivere i dati.

[in] length

Numero di byte da scrivere nel file.

Valore restituito

HRESULT_FROM_WIN32(ERROR_OFFSET_ALIGNMENT_VIOLATION) indica che l'handle dell'utente è stato aperto per i/O non memorizzati e byteOffset non è allineato alle dimensioni del settore del dispositivo di archiviazione.

Commenti

Il provider usa questa routine per fornire i dati richiesti in una chiamata del suo callback PRJ_GET_FILE_DATA_CB .

Il callback PRJ_GET_FILE_DATA_CB del provider viene richiamato quando il sistema deve assicurarsi che un file contenga dati. Quando il provider chiama PrjWriteFileData per fornire i dati richiesti, il sistema usa il FILE_OBJECT dell'utente per scrivere i dati nel file. Tuttavia, il sistema non può controllare se tale FILE_OBJECT è stato aperto per l'I/O memorizzato nel buffer o non memorizzato. Se il FILE_OBJECT è stato aperto per l'I/O non memorizzato, le letture e le scritture nel file devono rispettare determinati requisiti di allineamento. Il provider può soddisfare tali requisiti di allineamento eseguendo due operazioni:

  • Usare PrjAllocateAlignedBuffer per allocare il buffer da passare al buffer.
  • Assicurarsi che byteOffset e lunghezza siano interi dei requisiti di allineamento del dispositivo di archiviazione (la lunghezza non deve soddisfare questo requisito se byteOffset + length è uguale alla fine del file). Il provider può usare PrjGetVirtualizationInstanceInfo per recuperare il requisito di allineamento del dispositivo di archiviazione.

Il sistema lascia al provider di calcolare l'allineamento appropriato perché quando si elabora un callback PRJ_GET_FILE_DATA_CB il provider può scegliere di restituire i dati richiesti in più chiamate PrjWriteFileData , ogni parte restituita dei dati totali richiesti.

Si noti che se il provider scriverà l'intero file in una singola chiamata a PrjWriteFileData, ad esempio da byteOffset = 0 a lunghezza = dimensione del file, il provider non deve eseguire calcoli di allineamento. Tuttavia, deve comunque usare PrjAllocateAlignedBuffer per assicurarsi che il buffer soddisfi i requisiti di allineamento del dispositivo di archiviazione. Per altre informazioni sull'I/O memorizzato nel buffer, vedere l'argomento Buffering file.See the File Buffering topic for more information on buffered vs unbuffered I/O.

Requisiti

Requisito Valore
Client minimo supportato Windows 10, versione 1809 [solo app desktop]
Server minimo supportato Windows Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione projectedfslib.h