Correctly fixing bug 48665 requires keeping track of which pages of a PAGE_WRITECOPY mapping have been modified. Thankfully, there is already a patchset in wine-staging that adds support for PAGE_WRITECOPY, but unfortunately it is disabled by default because it has some bugs.
This series fixes the bugs I observed and adds an additional bit to keep track of whether the WRITECOPY pages have been modified. This can be used by QueryWorkingSetEx to properly report a page as shared or not.
I suggest that these patches are first applied to wine-staging to shake out any other bugs in the patchset, since it had been disabled by default and these patches will unconditionally enable it for x86 and x64. Provided that no regressions are observed, we can consider whether it should go into upstream. I suspect performance regressions are also possible.
Andrew Wesie (4): ntdll: Track if a WRITECOPY page has been modified. ntdll: Support WRITECOPY on x64. ntdll: Always enable WRITECOPY support. ntdll: Report unmodified WRITECOPY pages as shared.
dlls/ntdll/signal_x86_64.c | 40 ++++++++++++++++++++++++++++++ dlls/ntdll/virtual.c | 51 +++++++++++++++++++------------------- 2 files changed, 65 insertions(+), 26 deletions(-)