https://bugs.winehq.org/show_bug.cgi?id=51059
--- Comment #1 from Erich E. Hoover erich.e.hoover@gmail.com --- You are correct that O_SYMLINK is not identical to (O_NOFOLLOW | O_PATH), but I did some testing of this some time ago and the differences don't really matter for implementing FILE_OPEN_REPARSE_POINT. What you get currently in wine-staging, as you have discovered, is an error on read/write/etc. where the real behavior is that these succeed but do nothing (return no bytes, size 0, etc.). I have not gone to the trouble of implementing this because Windows applications don't expect this to "work".
However, you have stumbled across something _very_ interesting here in that it appears that cygwin opens the file and then "changes" it when converting it to a unix handle: https://cygwin.com/git/?p=cygwin-apps/setup.git;a=blob;f=filemanip.cc;h=48f5...
I'll need to put together a test case, but I suspect that _open_osfhandle actually opens a new handle that doesn't have FILE_OPEN_REPARSE_POINT set. I can probably get to that next weekend.