Hi @Norihiro Honda ,
Thanks for the clear question and for separating the documented contract from runtime behavior.
1. Is FILE_DIRECTORY_FILE | FILE_OPEN_REPARSE_POINT a documented, supported combination?
The short answer to this would be no. The current Microsoft documentation doesn't document it as a supported combination for user-mode NtCreateFile.
In the NtCreateFile (winternl.h) reference, the FILE_DIRECTORY_FILE entry says the other compatible CreateOptions flags "include only" FILE_SYNCHRONOUS_IO_ALERT, FILE_SYNCHRONOUS_IO_NONALERT, FILE_WRITE_THROUGH, FILE_OPEN_FOR_BACKUP_INTENT, and FILE_OPEN_BY_FILE_ID. That makes it a closed list, and FILE_OPEN_REPARSE_POINT isn't on it. The same page says CreateOptions must be "a compatible combination" of flags. Its Remarks also say the call fails if FILE_DIRECTORY_FILE is combined with an inconsistent CreateOptions or CreateDisposition value.
The FILE_OPEN_REPARSE_POINT entry and its Remarks paragraph only explain what the flag does (it bypasses normal reparse point processing). They don't mention directory opens and don't add an exception to the list above. So the restriction comes from the closed compatibility list in the FILE_DIRECTORY_FILE entry. Because the combination isn't documented as supported, there are no call-specific restrictions for it to interpret.
2. Is the WDK description relevant to a user-mode caller?
It's relevant as a cross-reference, but it doesn't change the answer. The Win32 page says user-mode NtCreateFile is the equivalent of the WDK's ZwCreateFile, and the NtCreateFile (ntifs.h) page says user-mode callers should use the name NtCreateFile.
The WDK page gives the same five compatible flags and the same three allowed dispositions (FILE_CREATE, FILE_OPEN, FILE_OPEN_IF) for FILE_DIRECTORY_FILE, and it doesn't list FILE_OPEN_REPARSE_POINT either. Its kernel-specific requirements (OBJ_KERNEL_HANDLE, the PASSIVE_LEVEL requirement, and Nt vs. Zw parameter handling) don't apply to a user-mode caller. Its flag descriptions agree with the Win32 page.
3. Documented contract vs. observed behavior
- Documented contract: both reference pages leave this combination out of the compatible set for
FILE_DIRECTORY_FILE. - Observed behavior: if a particular Windows build or file system accepts the combination, that's implementation behavior. It doesn't establish a documented guarantee.
One note: the same closed list also leaves out some other generally applicable flags. So, it may be incomplete rather than an intentional statement that every unlisted flag is prohibited.
Hope this helps.
If you find my response helpful to your situation, I would greatly appreciate it if you could follow the instruction here so others experiencing similar behavior can benefit from it as well.