共用方式為


PrjWriteFileData 函式 (projectedfslib.h)

提供在呼叫 PRJ_GET_FILE_DATA_CB 回呼時要求的資料。

語法

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

參數

[in] namespaceVirtualizationContext

虛擬化執行個體的不透明控制碼。

如果提供者正在提供 PRJ_GET_FILE_DATA_CB 回呼,這必須是回呼中傳遞至提供者的 callbackData VirtualizationInstanceHandle 成員的值。

[in] dataStreamId

要寫入的資料流的識別碼。

如果提供者正在提供 PRJ_GET_FILE_DATA_CB 回呼,這必須是回呼中傳遞至提供者的 callbackData Data的 DataStreamId 成員的值。

[in] buffer

包含要寫入之資料的緩衝區指標。 緩衝區必須至少與長度參數的值 (以位元組為單位) 一樣大。 提供者應該使用 PrjAllocateAlignedBuffer 來確保緩衝區符合儲存體裝置的對齊需求。

[in] byteOffset

從要寫入資料的檔案開頭的位元組位移。

[in] length

要寫入檔案的位元組數。

返回值

HRESULT_FROM_WIN32 (ERROR_OFFSET_ALIGNMENT_VIOLATION) 表示使用者的控制碼已針對未緩衝的 I/O 開啟,且 byteOffset 未與儲存裝置的磁區大小對齊。

備註

提供者會使用此常式來提供叫用其 PRJ_GET_FILE_DATA_CB 回呼時所要求的數據。

當系統需要確保檔案包含資料時,會叫用提供者的 PRJ_GET_FILE_DATA_CB 回呼。 當提供者呼叫 PrjWriteFileData 來提供要求的數據時,系統會使用使用者的FILE_OBJECT將該數據寫入檔案。 不過,系統無法控制該FILE_OBJECT是否針對緩衝或未緩衝的 I/O 開啟。 如果FILE_OBJECT已針對未緩衝的 I/O 開啟,則檔案的讀取和寫入必須遵守特定對齊需求。 提供者可以透過執行兩件事來滿足這些對齊要求:

  • 使用 PrjAllocateAlignedBuffer 配置要傳遞至緩衝區的緩衝區。
  • 請確定 byteOffset 和 length 是儲存裝置對齊需求的整數倍 (如果 byteOffset + length 等於檔案結尾,則長度不必符合此需求)。 提供者可以使用 PrjGetVirtualizationInstanceInfo 來擷取儲存體裝置的對齊需求。

系統會讓提供者來計算適當的對齊方式,因為在處理 PRJ_GET_FILE_DATA_CB 回呼時,提供者可能會選擇跨多個 PrjWriteFileData 呼叫傳回要求的數據,每個呼叫都會傳回要求數據總計的一部分。

請注意,如果提供者要在 PrjWriteFileData 的單一呼叫中寫入整個檔案,也就是從 byteOffset = 0 到 length = 檔案大小,提供者不需要執行任何對齊計算。 不過,它仍必須使用 PrjAllocateAlignedBuffer 來確保緩衝區符合儲存體裝置的對齊需求。 如需緩衝與未緩衝 I/O 的相關資訊,請參閱 檔案緩衝 主題。

需求

Requirement 價值觀
最低支援的用戶端 Windows 10 版本 1809 [僅限傳統型應用程式]
支援的最低伺服器 Windows Server [僅限傳統型應用程式]
目標平臺 窗戶
Header 投影fslib.h
Library 投影FSLib.lib