From: Kun Yang <yangkun@uniontech.com> Logs: When the target replaced of ReplaceFileW is a directory, the operation should not be performed. Signed-off-by: Kun Yang <yangkun@uniontech.com> --- dlls/kernel32/tests/file.c | 4 ++-- dlls/kernelbase/file.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c index c9be171121d..ed6e0606f1e 100644 --- a/dlls/kernel32/tests/file.c +++ b/dlls/kernel32/tests/file.c @@ -4472,10 +4472,10 @@ static void test_ReplaceFileW(void) ok(ret, "CreateDirectoryW error %ld\n", GetLastError()); SetLastError(0xdeadbeef); ret = pReplaceFileW(replaced, replacement, NULL, 0, 0, 0); - todo_wine ok(!ret, "expected failure\n"); + ok(!ret, "expected failure\n"); ok(GetLastError() == ERROR_ACCESS_DENIED, "got error %lu\n", GetLastError()); ret = RemoveDirectoryW(replaced); - todo_wine ok(ret, "RemoveDirectoryW error %ld\n", GetLastError()); + ok(ret, "RemoveDirectoryW error %ld\n", GetLastError()); DeleteFileW(replacement); if (removeBackup) diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c index 31884426143..9b66cecee6e 100644 --- a/dlls/kernelbase/file.c +++ b/dlls/kernelbase/file.c @@ -2766,7 +2766,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH ReplaceFileW( const WCHAR *replaced, const WCHAR * RtlFreeUnicodeString(&nt_replaced_name); if (!set_ntstatus( status )) return FALSE; - if (info.FileAttributes & FILE_ATTRIBUTE_READONLY) + if (info.FileAttributes & ( FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_DIRECTORY )) { SetLastError( ERROR_ACCESS_DENIED ); return FALSE; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10934