如何使用交易式 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 子系統的一部分。
  • 無法考慮系統起始的交易回復,而此復原可能隨時發生;例如,如果系統資源耗盡,則會回復交易。