トランザクション NTFS を使用する方法

トランザクション ファイル ハンドル

トランザクション NTFS (TxF) は、ファイル ハンドルをトランザクションにバインドします。 ハンドル (ReadFile 関数や WriteFile 関数など) で動作する操作の場合、実際の API 関数呼び出しは変更されません。 名前を受け取るファイル操作の場合、これらの操作には明示的なトランザクション関数があります。 たとえば、CreateFile を呼び出す 代わりに、CreateFileTransacted を呼び出します。 これにより、トランザクション化されたファイル ハンドルが作成されます。このハンドルは、ハンドルを必要とするすべてのファイル操作に使用できます。 このハンドルを使用する後続のすべての操作は、トランザクション操作です。

基本的な TxF の使用

次の一連の手順は、TxF の最も基本的な使用方法を表しています。 さらに複雑なシナリオも、アプリケーション デザイナーの判断でサポートされます。

  1. トランザクションを作成するには、KTM 関数 CreateTransaction を呼び出します。または、トランザクショントランザクションの IKernelTransaction インターフェイス (DTC) 分散トランザクション コーディネーター 使用します。
  2. CreateFileTransactedを呼び出して、トランザクションファイル ハンドルを取得します。
  3. トランザクションされたファイル ハンドルを使用して、必要に応じてファイルを変更します。
  4. 手順 1. で作成したトランザクションに関連付けられているすべてのトランザクション ファイル ハンドルを閉じます。
  5. 対応する KTM または DTC 関数を呼び出して、トランザクションをコミットまたは中止します。

TxF プログラミング モデルの重要なポイント

TxF プログラミング モデルには、TxF アプリケーションを開発する際に考慮すべき次の重要なポイントがあります。

  • トランザクションをコミットまたはロールバックする前に、アプリケーションですべてのトランザクションファイル ハンドルを閉じすることを強くお勧めします。 トランザクションが終了すると、システムはトランザクション処理されたハンドルを無効にします。 トランザクションの終了後にトランザクション ハンドルに対して実行された close を除くすべての操作は、次のエラーを返します。 ERROR HANDLE NO LONGER _ _ _ _ VALID
  • ファイルはストレージの単位として表示されます。 部分的な更新と完全なファイル上書きがサポートされています。 複数のトランザクションで同じファイルを同時に変更することはできません。
  • メモリ マップされた I/O は透過的であり、通常のファイル I/O と一貫性があります。 アプリケーションは、トランザクションをコミットする前に、開いているセクションをフラッシュして閉じる必要があります。 そうしない場合、トランザクション内のマップされたファイルが部分的に変更される可能性があります。 これが行われない場合、ロールバックは失敗します。

一般的なプログラミング エラー

トランザクション アプリケーションを開発するときに、次の一般的なエラーが発生する可能性があります。

  • トランザクションの完了後にファイル ハンドルを使用する。
  • トランザクションをコミットする前に、削除されたファイルとディレクトリへのハンドルを閉じできなかった場合、削除操作が発生しなくなります。 このイベントは、トランザクションの一部と見なされる削除操作のコミットを実行する前に発生する必要があります。 これは、Windows ファイル I/O サブシステムの一部として、操作が処理されていない場合でも、システムがファイルの最後のハンドルを閉じるまで、実際にはファイルを削除しないのでです。
  • システムによって開始されるトランザクションロールバックの考慮に失敗します。これは、いつでも発生する可能性があります。たとえば、システム リソースが使い果たされた場合、トランザクションはロールバックされます。