Windows 11 NTFS: Is create-only file and directory entry durability guaranteed after sudden power loss?

翼 松井 0 評価のポイント
2026-10-09T22:54:17.0466667+00:00

Hello,

I am developing a Windows 11 application that requires a durable, create-only marker to prevent an operation from being executed more than once.

Before the protected operation begins, the application must establish a marker file on NTFS. If the marker already exists, including an empty or partially written marker, the application refuses to execute again.

The proposed sequence is:

  1. Open and validate the parent directory, retaining its handle.

Create IDENTITIES.json relative to that directory using NtCreateFile, OBJECT_ATTRIBUTES.RootDirectory, and FILE_CREATE.

Write a consumption record through the newly created file handle.

Flush the file.

Read back and verify the record using the same handle.

Start the protected operation only if the required durability guarantee has been established.

I have reviewed the Microsoft documentation for NtCreateFile, FlushFileBuffers, NtFlushBuffersFileEx, NTFS, and Transactional NTFS.

I understand that exclusive creation, file flushing, and NTFS crash recovery do not necessarily establish the same guarantee.

My questions are:

Does a successful create-and-flush sequence provide a documented guarantee that both the newly created filename (parent directory entry) and the consumption record will survive an unexpected OS crash or sudden power loss?

References to official Microsoft documentation would be greatly appreciated.

Thank you.


<モデレーター注>
重複した質問内容を整理させて頂きました。

質問は、第三者を含めて混乱しない様に、一問一答形式にしてください。
1つのスレッド内に複数の質問を投稿しない
回答内容が発散してしまうことを回避する為に、質問内容2~5は 削除させて頂きました。
これらの質問については、必要に応じて新規に質問する様にしてください。

開発者テクノロジ | C++
開発者テクノロジ | C++

C プログラミング言語の拡張機能として作成された高レベルの汎用プログラミング言語。低レベルのメモリ操作機能に加えて、オブジェクト指向、汎用、関数型の機能を備えています。


3 件の回答

並べ替え方法: 最も役に立つ
  1. チャブーン 8,161 評価のポイント MVP ボランティア モデレーター
    2026-10-13T04:47:59.99+00:00

    チャブーンです。

    この件ですが、答えはもう出ているとは思うのですが、何が何でもそうしたい、という場合TPM2.0の機能を使うことはできそうです。Copilotに聞いたところ、以下の答えがあったのでお知らせしておきます。

    [Copilotの回答]


    質問文を見る限り、

    一度実行したら二度と実行させたくない

    という要件ですよね。

    TPMには

    NV Counter

    という仕組みがあります。

    特徴:

    初期値 0 
    ↓実行
    1
    ↓実行
    2
    ↓実行
    3
    
    • 増やせる
    • 減らせない
    • 上書きできない

    という性質を持ちます。

    そのため

    カウンタ == 0
        実行許可
        実行直前に1へ
    
    カウンタ > 0
        実行禁止
    

    という設計ができます。

    この回答は役に立ちましたか?


  2. Hebikuzure aka Murachi Akira 336.3K 評価のポイント MVP ボランティア モデレーター
    2026-10-10T07:28:02.27+00:00

    こちらに「NTFS では、トランザクション ベースのログ ファイルとチェックポイント情報を維持することで信頼性が向上します。 システム障害が発生した場合、NTFS はこのログを使用して、次回の起動時にファイル システムの整合性を自動的に復元し、データ損失のリスクを最小限に抑えます。」と記載があるように、ファイルシステムの整合性へのリスクは「最小限」ですが、リスクが無い(破損・不整合しない)保証はありません。

    より整合性の高いファイルシステムを望む場合は、ReFS を利用することを検討してください。

    この回答は役に立ちましたか?


  3. KazushigeSakai 13,950 評価のポイント ボランティア モデレーター
    2026-10-10T04:14:58.58+00:00

    あなたの質問は以下で合っていますか?

    翼 松井さん wrote:

    作成とフラッシュを正常に行った場合、新しく作成したファイル名(親ディレクトリエントリ)と消費レコードの両方が、予期しないOSのクラッシュや突然の電源喪失でも保持されるという文書化された保証はありますか?

    --

    一般的に言って突然の電源喪失については保証された動作は存在しません。また、OSのクラッシュで何処までがファイルシステムにフラッシュされるかも恐らく名言された文書は見つからないでしょう。あなたがアプリケーションの開発者でその保証をしなければいけないのであれば、セマフォを的確に使いファイルシステムの同期を確かめるしかありませんが、多くの場合ファイルシステムのキャッシュに関してWindows 11のメインメモリを最大限使っていますので電源喪失と共に失われる可能性の方が高いと考えるべきでしょう。
    ここではMicrosoftの公式見解を回答する人は現れません。必要であれば、Microsoft Learnを良く読み、不明点を絞った上で Microsoft Tech Community (https://techcommunity.microsoft.com/directory/)の適切なカテゴリで質問してみてください。より深い議論が出来るはずです。

    この回答は役に立ちましたか?


お客様の回答

質問作成者は回答に "承認済み"、モデレーターは "推奨" とマークできます。これにより、ユーザーは作成者の問題が回答によって解決したことを把握できます。