Fonction PrjWriteFileData (projectedfslib.h)

Fournit les données demandées dans un appel du rappel PRJ_GET_FILE_DATA_CB .

Syntaxe

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

Paramètres

[in] namespaceVirtualizationContext

Handle opaque pour le instance de virtualisation.

Si le fournisseur assure la maintenance d’un rappel PRJ_GET_FILE_DATA_CB , il doit s’agir de la valeur du membre VirtualizationInstanceHandle du callbackData passé au fournisseur dans le rappel.

[in] dataStreamId

Identificateur du flux de données dans lequel écrire.

Si le fournisseur assure la maintenance d’un rappel PRJ_GET_FILE_DATA_CB , il doit s’agir de la valeur du membre DataStreamId du callbackData passé au fournisseur dans le rappel.

[in] buffer

Pointeur vers une mémoire tampon contenant les données à écrire. La mémoire tampon doit être au moins aussi grande que la valeur du paramètre length en octets. Le fournisseur doit utiliser PrjAllocateAlignedBuffer pour s’assurer que la mémoire tampon répond aux exigences d’alignement du périphérique de stockage.

[in] byteOffset

Décalage d’octets par rapport au début du fichier dans lequel écrire les données.

[in] length

Nombre d’octets à écrire dans le fichier.

Valeur retournée

HRESULT_FROM_WIN32(ERROR_OFFSET_ALIGNMENT_VIOLATION) indique que le handle de l’utilisateur a été ouvert pour les E/S sans débogage et byteOffset n’est pas aligné sur la taille de secteur du périphérique de stockage.

Remarques

Le fournisseur utilise cette routine pour fournir les données demandées dans un appel de son rappel PRJ_GET_FILE_DATA_CB .

Le rappel PRJ_GET_FILE_DATA_CB du fournisseur est appelé lorsque le système doit s’assurer qu’un fichier contient des données. Lorsque le fournisseur appelle PrjWriteFileData pour fournir les données demandées, le système utilise les FILE_OBJECT de l’utilisateur pour écrire ces données dans le fichier. Toutefois, le système ne peut pas contrôler si cette FILE_OBJECT a été ouverte pour les E/S mises en mémoire tampon ou sans tampon. Si le FILE_OBJECT a été ouvert pour les E/S sans débogage, les lectures et écritures dans le fichier doivent respecter certaines exigences d’alignement. Le fournisseur peut répondre à ces exigences d’alignement en effectuant deux opérations :

  • Utilisez PrjAllocateAlignedBuffer pour allouer la mémoire tampon à passer à la mémoire tampon.
  • Vérifiez que byteOffset et length sont des multiples entiers de l’exigence d’alignement du périphérique de stockage (la longueur n’a pas besoin de répondre à cette exigence si byteOffset + longueur est égal à la fin du fichier). Le fournisseur peut utiliser PrjGetVirtualizationInstanceInfo pour récupérer les exigences d’alignement du périphérique de stockage.

Le système laisse au fournisseur le devoir de calculer l’alignement approprié, car lors du traitement d’un rappel de PRJ_GET_FILE_DATA_CB , le fournisseur peut choisir de retourner les données demandées sur plusieurs appels PrjWriteFileData , chacun retournant une partie du total des données demandées.

Notez que si le fournisseur va écrire le fichier entier en un seul appel à PrjWriteFileData, c’est-à-dire de byteOffset = 0 à length = taille du fichier, le fournisseur n’a pas à effectuer de calculs d’alignement. Toutefois, il doit toujours utiliser PrjAllocateAlignedBuffer pour s’assurer que la mémoire tampon répond aux exigences d’alignement du périphérique de stockage. Pour plus d’informations sur les E/S mises en mémoire tampon et sans tampon, consultez la rubrique Mise en mémoire tampon .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10, version 1809 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête projectedfslib.h