共用方式為


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 之 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將該數據寫入檔案。 不過,系統無法控制已針對緩衝或未緩衝 I/O 開啟該FILE_OBJECT。 如果已針對未緩衝 I/O 開啟FILE_OBJECT,則對檔案的讀取和寫入必須符合特定對齊需求。 提供者可以透過執行兩件事來符合這些對齊需求:

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

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

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

規格需求

需求
最低支援的用戶端 Windows 10 版本 1809 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server [僅限傳統型應用程式]
目標平台 Windows
標頭 projectedfslib.h