如何使用交易式 NTFS

交易檔案控制代碼

交易式 NTFS (TxF) 會將檔案控制代碼系結至交易。 例如,對於在控制碼上運作的作業 (, ReadFileWriteFile 函式) ,實際的 API 函式呼叫不會變更。 對於採用名稱的檔案作業,這些作業會有明確的交易函式。 例如,呼叫CreateFileTransacted,而不是呼叫CreateFile。 這會建立交易檔案控制代碼,然後可用於需要控制碼的所有檔案作業。 使用此控制碼的所有後續作業都是交易作業。

基本 TxF 使用方式

下列步驟系列代表 TxF 的最基本用法。 應用程式設計工具也支援更複雜的案例。

  1. 呼叫 KTM 函式CreateTransaction或使用分散式交易協調器 (DTC) 的IKernelTransaction介面來建立交易。
  2. 藉由呼叫 CreateFileTransacted來取得交易檔案控制代碼 (s) 。
  3. 使用交易的檔案控制碼 (s) ,視需要修改檔案 (s) 。
  4. 關閉與步驟 1 中所建立交易相關聯的所有交易檔案控制代碼。
  5. 藉由呼叫對應的 KTM 或 DTC 函式來認可或中止交易。

TxF 程式設計模型的關鍵點

當您開發 TxF 應用程式時,TxF 程式設計模型有下列重點可供您考慮:

  • 強烈建議應用程式先關閉所有交易檔案控制代碼,再認可或回復交易。 當交易結束時,系統會使所有交易控制碼失效。 交易結束之後,在交易控制碼上執行關閉以外的任何作業,都傳回下列錯誤: ERROR_HANDLE_NO_LONGER_VALID
  • 檔案會視為儲存體單位。 支援部分更新和完整檔案複寫。 多個交易無法同時修改相同的檔案。
  • 記憶體對應 I/O 是透明且與一般檔案 I/O 一致。 應用程式必須先排清並關閉已開啟的區段,才能認可交易。 若無法這麼做,可能會導致交易內對應檔案的部分變更。 如果未完成,則復原會失敗。

常見的程式設計錯誤

開發交易的應用程式時,可能會發生下列常見錯誤:

  • 在交易完成之後使用檔案控制代碼。
  • 在認可交易之前,無法關閉已刪除檔案和目錄的控制碼,這可防止刪除作業發生。 必須先發生此事件,才能執行認可,才能將刪除作業視為交易的一部分。 這是因為系統實際上不會刪除檔案,直到最後一個控制碼關閉,即使作業未交易,也是Windows檔案 I/O 子系統的一部分。
  • 無法考慮系統起始的交易復原,這可以隨時發生;例如,如果系統資源耗盡,則會回復交易。