The published contract in the provided material does not state that user-mode NtCreateFile supports OBJ_DONT_REPARSE for a directory-relative name, and it does not define any special behavior for that combination.
The applicable published sections show a documentation mismatch:
- The
NtCreateFileparameter description forObjectAttributes.Attributessays the value “can be zero orOBJ_CASE_INSENSITIVE.” - The general
OBJECT_ATTRIBUTESstructure definition lists additional flags, includingOBJ_DONT_REPARSE, and defines it as preventing reparse points from being followed while parsing the object name, returningSTATUS_REPARSE_POINT_ENCOUNTEREDif a reparse is encountered.
For directory-relative naming, the published NtCreateFile contract does support relative resolution in general:
- If
RootDirectoryis non-NULL,ObjectNamespecifies a file name relative to that directory. - The file name can therefore be supplied as a relative name against an existing directory handle.
What is not published in the provided material is any NtCreateFile-specific statement that:
-
OBJ_DONT_REPARSEis accepted by user-modeNtCreateFile -
OBJ_DONT_REPARSEis rejected by user-modeNtCreateFile - support differs between fully qualified and directory-relative names
- support depends on a particular platform version, file system, or other runtime condition for this API contract
So, based on the published material provided, the reconciled reading is:
- The general
OBJECT_ATTRIBUTESdocumentation definesOBJ_DONT_REPARSEas a valid structure flag with specific semantics. - The
NtCreateFilepage narrows its ownObjectAttributes.Attributesdescription to “zero orOBJ_CASE_INSENSITIVE” and does not mentionOBJ_DONT_REPARSE. - That leaves an unresolved documentation discrepancy for
NtCreateFile, including the directory-relative case.
The refusal scope and platform conditions are also not defined in the provided material. The only published failure behavior tied to OBJ_DONT_REPARSE in the provided context is the general statement that reparses cause failure with STATUS_REPARSE_POINT_ENCOUNTERED when that flag is set. No narrower user-mode NtCreateFile contract is published here for relative names.