Partager via


PrjWriteFileData, fonction (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 l’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 transmis 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 transmis 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 de longueur en octets. Le fournisseur doit utiliser PrjAllocateAlignedBuffer pour s’assurer que la mémoire tampon répond aux exigences d’alignement de l’appareil de stockage.

[in] byteOffset

Décalage d’octets à partir du début du fichier auquel é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 non chiffrées et byteOffset n’est pas aligné sur la taille du secteur de l’appareil 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 débogage. Si le FILE_OBJECT a été ouvert pour les E/S nonbuffer, les lectures et les é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 de l’appareil de stockage (la longueur n’a pas besoin de répondre à cette exigence si byteOffset + length est égal à la fin du fichier). Le fournisseur peut utiliser PrjGetVirtualizationInstanceInfo pour récupérer l’exigence d’alignement de l’appareil de stockage.

Le système le laisse au fournisseur pour calculer l’alignement approprié, car lors du traitement d’un PRJ_GET_FILE_DATA_CB rappel, 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 l’intégralité du fichier dans un seul appel à PrjWriteFileData, c’est-à-dire de byteOffset = 0 à longueur = taille du fichier, le fournisseur n’a pas à effectuer de calculs d’alignement. Toutefois, il doit toujours utiliser PrjAllocateAlignedBuffer pour garantir que la mémoire tampon répond aux exigences d’alignement de l’appareil de stockage. Pour plus d’informations sur les E/S mises en mémoire tampon et les E/S non mises en mémoire tampon, consultez la rubrique Mise en mémoire tampon .

Spécifications

Requirement Valeur
Client minimum requis Windows 10, version 1809 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server [applications de bureau uniquement]
plateforme cible Fenêtres
Header projectedfslib.h
Library ProjectedFSLib.lib