From: "Erich E. Hoover" erich.e.hoover@gmail.com
--- dlls/kernelbase/file.c | 4 ++-- dlls/ntdll/tests/file.c | 15 +++------------ 2 files changed, 5 insertions(+), 14 deletions(-)
diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c index 79cb99cbe3c..e2da94831df 100644 --- a/dlls/kernelbase/file.c +++ b/dlls/kernelbase/file.c @@ -2553,7 +2553,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH MoveFileWithProgressW( const WCHAR *source, const InitializeObjectAttributes( &attr, &nt_name, OBJ_CASE_INSENSITIVE, 0, NULL ); status = NtOpenFile( &source_handle, DELETE | SYNCHRONIZE, &attr, &io, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - FILE_SYNCHRONOUS_IO_NONALERT ); + FILE_SYNCHRONOUS_IO_NONALERT | FILE_OPEN_REPARSE_POINT ); RtlFreeUnicodeString( &nt_name ); if (!set_ntstatus( status )) goto error;
@@ -2672,7 +2672,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH ReplaceFileW( const WCHAR *replaced, const WCHAR * } attr.ObjectName = &nt_replacement_name; status = NtOpenFile( &hReplacement, GENERIC_READ | GENERIC_WRITE | DELETE | WRITE_DAC | SYNCHRONIZE, - &attr, &io, 0, FILE_SYNCHRONOUS_IO_NONALERT | FILE_NON_DIRECTORY_FILE ); + &attr, &io, 0, FILE_SYNCHRONOUS_IO_NONALERT | FILE_NON_DIRECTORY_FILE | FILE_OPEN_REPARSE_POINT ); RtlFreeUnicodeString(&nt_replacement_name); if (!set_ntstatus( status )) return FALSE; NtClose( hReplacement ); diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c index 0b4c7503511..a0978dd901e 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c @@ -6928,20 +6928,11 @@ static void test_reparse_points(void)
handle2 = CreateFileW( path, GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_OPEN_REPARSE_POINT, 0 ); - todo_wine ok( handle2 == INVALID_HANDLE_VALUE, "expected failure\n" ); - todo_wine ok( GetLastError() == ERROR_FILE_NOT_FOUND, "got error %lu\n", GetLastError() ); - if (handle2 != INVALID_HANDLE_VALUE) CloseHandle( handle2 ); + ok( handle2 == INVALID_HANDLE_VALUE, "expected failure\n" ); + ok( GetLastError() == ERROR_FILE_NOT_FOUND, "got error %lu\n", GetLastError() );
ret = MoveFileW( path2, path ); - todo_wine ok( ret == TRUE, "got error %lu\n", GetLastError() ); - if (!ret) - { - /* undo what we incorrectly did above */ - WCHAR target[MAX_PATH]; - swprintf( target, ARRAY_SIZE(target), L"%stestreparse_file", temp_path ); - ret = MoveFileW( path2, target ); - ok( ret == TRUE, "got error %lu\n", GetLastError() ); - } + ok( ret == TRUE, "got error %lu\n", GetLastError() );
handle2 = CreateFileW( path2, GENERIC_ALL, 0, NULL, CREATE_ALWAYS, 0, 0 ); ok( handle2 != INVALID_HANDLE_VALUE, "got error %lu\n", GetLastError() );