Hi Jeffrey,
apart from the attribute stuff... On Mar 6 13:55, Jeffrey Altman via Cygwin wrote: > The default ProcessPlaceholderCompaibilityMode is PHCM_EXPOSE_PLACEHOLDERS > which makes the FILE_ATTRIBUTE flags and reparse tags visible. Microsoft > maintains a database of processes for which PHCM_DISGUISE_PLACEHOLDER is set > which hides that information. Its unclear to me that explicitly setting the > placeholder compatibility mode is useful. What I see as a problem here is this: https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/nf-ntifs-rtlsetprocessplaceholdercompatibilitymode Quote: "Most Windows applications see exposed placeholders by default. For ^^^^ compatibility reasons, Windows may decide that certain applications ^^^^^^^^^^^^^^^^^^ see disguised placeholders by default." But then again, in other news from Microsoft: https://learn.microsoft.com/en-us/windows/win32/cfapi/build-a-cloud-file-sync-engine#compatibility-with-applications-that-use-reparse-points Quote: "[...] the cloud files API always hides its reparse points from all ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ applications except for sync engines and processes whose main image ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ resides under %systemroot%. Applications that understand reparse ^^^^^^^^^^^^^^^^^^^^^^^^^^^ points correctly can force the platform to expose cloud files API reparse points using RtlSetProcessPlaceholderCompatibilityMode or RtlSetThreadProcessPlaceholderCompatibilityMode. Considering these two statements, it's totally unclear to a process, if it just defaults to "exposed" or "disguised". Fortunately we can ask Windows by calling the RtlQueryProcessPlaceholderCompatibilityMode() function, right? Lets have a look into the documentation at https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/nf-ntifs-rtlqueryprocessplaceholdercompatibilitymode Quote: "Return value This function returns the process's placeholder compatibily mode (PHCM_xxx), or a negative value on error (PCHM_ERROR_xxx). Contains one of the following values: Compatibility Mode Value PHCM_APPLICATION_DEFAULT 0 PHCM_DISGUISE_PLACEHOLDER 1 PHCM_EXPOSE_PLACEHOLDERS 2 PHCM_MAX 2 PHCM_ERROR_INVALID_PARAMETER -1 PHCM_ERROR_NO_TEB -2" So I called the function right at the start of the Cygwin DLL, and it returns the value 0, i. e., PHCM_APPLICATION_DEFAULT. At this point the process *still* has no idea if placeholders are exposed or disguised. What a great API! \o/ So, from the above, and if we really want to be sure that placeholders will be exposed, I don't see any way around calling RtlSetProcessPlaceholderCompatibilityMode(PHCM_EXPOSE_PLACEHOLDERS) explicitely at DLL startup. What do you think? Thanks, Corinna -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple