[PATCH v2 3/4] kernel32: Correct ReplaceFileW flags when opening replaced

Brock York twunknown at gmail.com
Thu Aug 30 06:01:15 CDT 2018


Remove GENERIC_WRITE flag when opening replaced
file.
ReplaceFileW will fail when called to replace the
current executable. This is not the same behaviour
as tested on Windows 7, 10 and XP this is because
the "replaced" file is opened with the
GENERIC_WRITE flag.
The MSDN also mentions that the replaced file is
only opened with GENERIC_READ, DELETE and SYNCHRONIZE.

This patch will fix the following bug once it is
merged into Wine-Staging as the WarFrame launcher
requires patches from Wine-Staging to work.
Wine-Bug:https://bugs.winehq.org/show_bug.cgi?id=33845

Signed-off-by: Brock York <twunknown at gmail.com>
---
 dlls/kernel32/file.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c
index b558f8e205..3fdac41c50 100644
--- a/dlls/kernel32/file.c
+++ b/dlls/kernel32/file.c
@@ -1772,7 +1772,7 @@ BOOL WINAPI ReplaceFileW(LPCWSTR lpReplacedFileName, LPCWSTR lpReplacementFileNa
     }
     replaced_flags = lpBackupFileName ? FILE_OPEN : FILE_OPEN_IF;
     attr.ObjectName = &nt_replaced_name;
-    status = NtOpenFile(&hReplaced, GENERIC_READ|GENERIC_WRITE|DELETE|SYNCHRONIZE,
+    status = NtOpenFile(&hReplaced, GENERIC_READ|DELETE|SYNCHRONIZE,
                         &attr, &io,
                         FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
                         FILE_SYNCHRONOUS_IO_NONALERT|FILE_NON_DIRECTORY_FILE);
-- 
2.18.0




More information about the wine-devel mailing list