No public documentation in the provided material establishes a stronger supported user-mode primitive than rename/move semantics for this requirement, and no documented API in that material provides a handle-bound, no-replace publication guarantee after the original staged-file handle has been closed.
Supported facts from the documentation provided:
- For transacted file I/O, renaming is documented as a move operation: to rename a file as a transacted operation, call MoveFileTransacted.
- Transactional NTFS documentation also states that directory contents can change while enumeration is in progress, and changes outside a transaction are immediately visible inside the transaction. That material describes visibility and isolation behavior, not a general linearizability guarantee for competing publishers.
- Applications should close all handles bound to a transaction before commit, and for memory-mapped files must flush views, close the mapping object, and close the file handle before committing. That supports durability/cleanup requirements, but not the stronger publication contract requested.
- Windows file-system operations are only cancelable when blocked and waiting; operations actively being processed are not cancelable. That means loss of completion status can leave uncertainty about outcome, but the provided documentation does not define a publication primitive that eliminates that ambiguity.
The closest documented conclusion in the provided material is a limitation:
- Public documentation does not establish the requested object/effect boundary or concurrency guarantee for relative create/rename-style operations under namespace races.
- Observed NTFS behavior on a tested build is not a supported Windows-wide contract.
- An authoritative determination of internal serialization boundaries and supported guarantees would require a Microsoft Support case.
Applied to this question, the provided documentation does not document:
- a supported user-mode API that binds publication to an exact staged file object after its handle has been closed,
- a stronger no-replace publication guarantee than the documented rename/move behavior,
- a documented way to distinguish all destination-collision outcomes from every other failure under concurrent namespace mutation beyond the normal returned status of the specific API call,
- a documented primitive that removes unknown-outcome cases when completion status is lost.
So, from the provided documentation alone, the supported answer is:
- No documented stronger user-mode primitive is established here.
- No documented handle-bound no-replace publication operation after closing the original handle is established here.
- The public documentation provided is insufficient to claim full concurrent linearizability or a stronger exact-object publication contract.
- For an authoritative guarantee beyond that, a Microsoft Support case is required.
References: