Función PrjWriteFileData (projectedfslib.h)
Proporciona los datos solicitados en una invocación de la devolución de llamada de PRJ_GET_FILE_DATA_CB .
Sintaxis
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 la instancia de virtualización.
Si el proveedor está atendiendo una devolución de llamada de PRJ_GET_FILE_DATA_CB , debe ser el valor del miembro VirtualizationInstanceHandle del callbackData pasado al proveedor en la devolución de llamada.
[in] dataStreamId
Identificador del flujo de datos en el que se va a escribir.
Si el proveedor está atendiendo una devolución de llamada de PRJ_GET_FILE_DATA_CB , debe ser el valor del miembro DataStreamId del callbackData pasado al proveedor en la devolución de llamada.
[in] buffer
Puntero a un búfer que contiene los datos que se van a escribir. El búfer debe ser al menos tan grande como el valor del parámetro length en bytes. El proveedor debe usar PrjAllocateAlignedBuffer para asegurarse de que el búfer cumple los requisitos de alineación del dispositivo de almacenamiento.
[in] byteOffset
Desplazamiento de bytes desde el principio del archivo en el que se van a escribir los datos.
[in] length
Número de bytes que se van a escribir en el archivo.
Valor devuelto
HRESULT_FROM_WIN32(ERROR_OFFSET_ALIGNMENT_VIOLATION) indica que el identificador del usuario se abrió para E/S sin búfer y byteOffset no está alineado con el tamaño del sector del dispositivo de almacenamiento.
Comentarios
El proveedor usa esta rutina para proporcionar los datos solicitados en una invocación de su PRJ_GET_FILE_DATA_CB devolución de llamada.
La devolución de llamada del proveedor PRJ_GET_FILE_DATA_CB se invoca cuando el sistema necesita asegurarse de que un archivo contiene datos. Cuando el proveedor llama a PrjWriteFileData para proporcionar los datos solicitados, el sistema usa el FILE_OBJECT del usuario para escribir esos datos en el archivo. Sin embargo, el sistema no puede controlar si ese FILE_OBJECT se abrió para E/S almacenada en búfer o sin búfer. Si el FILE_OBJECT se abrió para E/S sin búfer, las lecturas y escrituras en el archivo deben cumplir ciertos requisitos de alineación. El proveedor puede cumplir esos requisitos de alineación haciendo dos cosas:
- Use PrjAllocateAlignedBuffer para asignar el búfer que se va a pasar al búfer.
- Asegúrese de que byteOffset y length sean múltiplo enteros del requisito de alineación del dispositivo de almacenamiento (la longitud no tiene que cumplir este requisito si byteOffset + length es igual al final del archivo). El proveedor puede usar PrjGetVirtualizationInstanceInfo para recuperar el requisito de alineación del dispositivo de almacenamiento.
El sistema lo deja al proveedor para calcular la alineación adecuada, ya que al procesar una devolución de llamada de PRJ_GET_FILE_DATA_CB el proveedor puede optar por devolver los datos solicitados en varias llamadas PrjWriteFileData , cada una de las cuales devuelve parte del total de datos solicitados.
Tenga en cuenta que si el proveedor va a escribir todo el archivo en una sola llamada a PrjWriteFileData, es decir, de byteOffset = 0 a length = size del archivo, el proveedor no tiene que realizar ningún cálculo de alineación. Sin embargo, debe seguir usando PrjAllocateAlignedBuffer para asegurarse de que el búfer cumple los requisitos de alineación del dispositivo de almacenamiento. Consulte el tema File Buffering (Almacenamiento en búfer de archivos) para obtener más información sobre la E/S almacenada en búfer frente a E/S sin búfer.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 10, versión 1809 [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | projectedfslib.h |