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