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 |