- PO-01 — Namespace continuity: Unsupported The available public documentation does not establish a version-qualified contract that a held directory handle keeps the directory continuously confined to the same parent or ancestor chain for the handle lifetime. The documented relative-name rule is only that when
RootDirectoryis non-null, the name is interpreted relative to that handle. The available material does not define a guarantee covering parent rename, ancestor rename, move to another parent, aliasing, in-place reparse changes, filesystem filters, or a supported Windows-version matrix for continuous namespace stability. The available material also does not establish that0x00100081/share3and0x80/share3provide equivalent rename or move protection. No supported API or architecture providing the requested continuity guarantee is identified in the available material. - PO-02 — Reparse rejection before mutation: Conditional The available material supports only these points:
-
OBJECT_ATTRIBUTESdefinesOBJ_DONT_REPARSEas a flag meaning no reparse points are followed when parsing the name of the associated object. - Public documentation for
NtCreateFiledoes not expressly document the requested user-mode, directory-relativeOBJ_DONT_REPARSEcontract with the version, filesystem, filter, and mutation-order guarantees requested. - Public documentation does not define an atomic object/effect boundary for the exact
FILE_CREATEdirectory request relative to concurrent reparse insertion or conversion.
NtCreateFilepage has narrower wording forAttributes, while theOBJECT_ATTRIBUTESpage gives the general definition ofOBJ_DONT_REPARSE. The available material does not provide an official reconciliation beyond that documentation gap. As a pathname alternative,CreateDirectory2WdocumentsDIRECTORY_FLAGS_DISALLOW_PATH_REDIRECTS, which preventslpPathNamefrom being redirected by reparse points or symbolic links. That is a documented pathname API behavior, but the available material does not state that it is equivalent to a held-RootDirectoryrelative create or that it provides the requested confinement guarantee. -
- PO-03 — Original creation handle to lasting guard: Unsupported The available material does not define what rename or move protection is provided by the original
0x00120080/share1directory handle, and it does not define a supported continuous handoff from that handle to an additional0x00100081/share3existing-directory handle. The available material also does not define the identity, namespace, or ordering preconditions needed to guarantee that movement cannot occur between creation and guard acquisition before a first child mutation. Post-create identity checks may help detect drift, but the available material does not establish them as a way to prevent an earlier unauthorized mutation. On parent rights for relative opens, the available material supports only that the public contract does not specify which granted-access bits, if any, are required on theRootDirectoryhandle beyond the general relative-name behavior. A measured Q&A answer reports success with minimal parent-handle rights on one tested configuration, but that is not a published contract for all supported environments.
In short:
- PO-01: Unsupported
- PO-02: Conditional —
OBJ_DONT_REPARSEis generally defined, but the exact pre-mutation guarantee for the requested user-mode relativeNtCreateFile(FILE_CREATE)directory call is not established by the available public documentation. - PO-03: Unsupported
References:
- CreateDirectory2W function (fileapi.h)
- NTFS single-component NtCreateFile relative to a held directory during junction conversion: original-object-or-refusal contract? - Microsoft Q&A
- Is OBJ_DONT_REPARSE supported by user-mode NtCreateFile with a directory-relative name? - Microsoft Q&A
- NtCreateFile: Does a RootDirectory handle granted only FILE_READ_ATTRIBUTES need additional rights? - Microsoft Q&A