如何使用交易式 NTFS
交易檔案控制代碼
交易式 NTFS (TxF) 會將檔案控制代碼系結至交易。 例如,對於處理控制碼的作業 (, ReadFile 和 WriteFile 函式) ,實際的 API 函式呼叫不會變更。 對於採用名稱的檔案作業,這些作業有明確的交易函式。 例如,呼叫CreateFileTransacted,而不是呼叫CreateFile。 這會建立交易檔案控制代碼,然後可用於需要控制碼的所有檔案作業。 使用此控制碼的所有後續作業都是交易作業。
基本 TxF 使用方式
下列一系列步驟代表 TxF 的最基本用法。 此外,也支援更複雜的案例,而視應用程式設計工具的考慮。
- 呼叫 KTM 函式CreateTransaction或使用分散式交易協調器 (DTC) 的IKernelTransaction介面來建立交易。
- 呼叫 CreateFileTransacted以取得交易檔案控制代碼 (s) 。
- 視需要使用交易的檔案控制碼 (s) ,視需要修改檔案 (s) 。
- 關閉與步驟 1 中建立之交易相關聯的所有交易控制碼。
- 藉由呼叫對應的 KTM 或 DTC 函式來認可或中止交易。
TxF 程式設計模型的關鍵點
當您開發 TxF 應用程式時,TxF 程式設計模型有下列重點可供您考慮:
- 強烈建議應用程式先關閉所有交易檔案控制代碼,再認可或回復交易。 當交易結束時,系統會使所有交易控制碼失效。 交易結束時在交易控制碼上執行的任何作業除外,都傳回下列錯誤: ERROR_HANDLE_NO_LONGER_VALID。
- 檔案會視為儲存體單位。 支援部分更新和完整檔案複寫。 多個交易無法同時修改相同的檔案。
- 記憶體對應 I/O 是透明的,且與一般檔案 I/O 一致。 應用程式必須先排清並關閉已開啟的區段,才能認可交易。 若無法這麼做,可能會導致交易內對應檔案的部分變更。 如果未完成,復原就會失敗。
常見的程式設計錯誤
開發交易的應用程式時,可能會發生下列常見錯誤:
- 在交易完成之後使用檔案控制代碼。
- 在認可交易之前,無法關閉已刪除檔案和目錄的控制碼,這會導致刪除作業無法發生。 執行認可之前,必須先發生此事件,才能將刪除作業視為交易的一部分。 這是因為系統不會實際刪除檔案,直到關閉它的最後一個控制碼為止,即使作業未交易,也是 Windows 檔案 I/O 子系統的一部分。
- 無法考慮系統起始的交易回復,而此復原可能隨時發生;例如,如果系統資源耗盡,則會回復交易。