PrjWriteFileData-Funktion (projectedfslib.h)
Stellt die bei einem Aufruf des PRJ_GET_FILE_DATA_CB-Rückrufs angeforderten Daten bereit.
Syntax
HRESULT PrjWriteFileData(
[in] PRJ_NAMESPACE_VIRTUALIZATION_CONTEXT namespaceVirtualizationContext,
[in] const GUID *dataStreamId,
[in] void *buffer,
[in] UINT64 byteOffset,
[in] UINT32 length
);
Parameter
[in] namespaceVirtualizationContext
Undurchsichtiges Handle für die Virtualisierung instance.
Wenn der Anbieter einen PRJ_GET_FILE_DATA_CB Rückruf verwaltet, muss dies der Wert aus dem VirtualizationInstanceHandle-Member des callbackData-Elements sein, das im Rückruf an den Anbieter übergeben wird.
[in] dataStreamId
Bezeichner für den Datenstrom, in den geschrieben werden soll.
Wenn der Anbieter einen PRJ_GET_FILE_DATA_CB Rückruf verwaltet, muss dies der Wert aus dem DataStreamId-Member des callbackData sein, das im Rückruf an den Anbieter übergeben wird.
[in] buffer
Zeiger auf einen Puffer, der die zu schreibenden Daten enthält. Der Puffer muss mindestens so groß sein wie der Wert des length-Parameters in Bytes. Der Anbieter sollte PrjAllocateAlignedBuffer verwenden, um sicherzustellen, dass der Puffer die Ausrichtungsanforderungen des Speichergeräts erfüllt.
[in] byteOffset
Byteoffset vom Anfang der Datei, an der die Daten geschrieben werden sollen.
[in] length
Die Anzahl der Bytes, die in die Datei geschrieben werden sollen.
Rückgabewert
HRESULT_FROM_WIN32(ERROR_OFFSET_ALIGNMENT_VIOLATION) gibt an, dass das Handle des Benutzers für ungepufferte E/A geöffnet wurde und byteOffset nicht an der Sektorgröße des Speichergeräts ausgerichtet ist.
Hinweise
Der Anbieter verwendet diese Routine, um die beim Aufruf seines PRJ_GET_FILE_DATA_CB-Rückrufs angeforderten Daten bereitzustellen.
Der PRJ_GET_FILE_DATA_CB Rückruf des Anbieters wird aufgerufen, wenn das System sicherstellen muss, dass eine Datei Daten enthält. Wenn der Anbieter PrjWriteFileData aufruft , um die angeforderten Daten anzugeben, verwendet das System die FILE_OBJECT des Benutzers, um diese Daten in die Datei zu schreiben. Das System kann jedoch nicht steuern, ob diese FILE_OBJECT für gepufferte oder ungepufferte E/A-Vorgänge geöffnet wurde. Wenn die FILE_OBJECT für ungepufferte E/A-Vorgänge geöffnet wurde, müssen Lese- und Schreibvorgänge in die Datei bestimmte Ausrichtungsanforderungen erfüllen. Der Anbieter kann diese Ausrichtungsanforderungen erfüllen, indem er zwei Schritte ausführt:
- Verwenden Sie PrjAllocateAlignedBuffer , um den Puffer zuzuweisen, der an den Puffer übergeben werden soll.
- Stellen Sie sicher, dass byteOffset und length ganzzahlige Vielfache der Ausrichtungsanforderung des Speichergeräts sind (die Länge muss diese Anforderung nicht erfüllen, wenn byteOffset + length gleich dem Ende der Datei ist). Der Anbieter kann PrjGetVirtualizationInstanceInfo verwenden, um die Ausrichtungsanforderung des Speichergeräts abzurufen.
Das System überlässt es dem Anbieter, die richtige Ausrichtung zu berechnen, da der Anbieter bei der Verarbeitung eines PRJ_GET_FILE_DATA_CB Rückrufs möglicherweise die angeforderten Daten über mehrere PrjWriteFileData-Aufrufe hinweg zurückgibt, wobei jeweils ein Teil der angeforderten Daten zurückgegeben wird.
Beachten Sie, dass der Anbieter keine Ausrichtungsberechnungen durchführen muss, wenn der Anbieter die gesamte Datei in einem einzigen Aufruf von PrjWriteFileData schreibt, d. h. von byteOffset = 0 bis length = größe der Datei. Es muss jedoch weiterhin PrjAllocateAlignedBuffer verwendet werden , um sicherzustellen, dass der Puffer die Ausrichtungsanforderungen des Speichergeräts erfüllt. Weitere Informationen zu gepufferten und nicht gepufferten E/A-Vorgängen finden Sie im Thema Dateipufferung .
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 10, Version 1809 [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | projectedfslib.h |