[PATCH 0/5] MR8540: kernelbase: Handle reparse points in some high-level functions, part 1/2.
These do not do anything currently, since we don't support FILE_OPEN_REPARSE_POINT on the Unix side yet. However, they are correct, as demonstrated by the recently committed tests, and it seems prudent to get these out of the way for now. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/8540
From: "Erich E. Hoover" <erich.e.hoover(a)gmail.com> --- dlls/kernelbase/file.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c index 213cb926d7c..aa9dcbaa6cd 100644 --- a/dlls/kernelbase/file.c +++ b/dlls/kernelbase/file.c @@ -770,6 +770,8 @@ static UINT get_nt_file_options( DWORD attributes ) options |= FILE_DELETE_ON_CLOSE; if (attributes & FILE_FLAG_NO_BUFFERING) options |= FILE_NO_INTERMEDIATE_BUFFERING; + if (attributes & FILE_FLAG_OPEN_REPARSE_POINT) + options |= FILE_OPEN_REPARSE_POINT; if (!(attributes & FILE_FLAG_OVERLAPPED)) options |= FILE_SYNCHRONOUS_IO_NONALERT; if (attributes & FILE_FLAG_RANDOM_ACCESS) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/8540
From: "Erich E. Hoover" <erich.e.hoover(a)gmail.com> --- dlls/kernelbase/file.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c index aa9dcbaa6cd..35ee00ab0b6 100644 --- a/dlls/kernelbase/file.c +++ b/dlls/kernelbase/file.c @@ -3586,7 +3586,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH RemoveDirectoryW( LPCWSTR path ) InitializeObjectAttributes( &attr, &nt_name, OBJ_CASE_INSENSITIVE, 0, NULL ); status = NtOpenFile( &handle, DELETE | SYNCHRONIZE, &attr, &io, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT ); + FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT | FILE_OPEN_REPARSE_POINT ); RtlFreeUnicodeString( &nt_name ); if (!status) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/8540
From: "Erich E. Hoover" <erich.e.hoover(a)gmail.com> --- dlls/kernelbase/file.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c index 35ee00ab0b6..ddd0a0b6d3d 100644 --- a/dlls/kernelbase/file.c +++ b/dlls/kernelbase/file.c @@ -1021,9 +1021,9 @@ BOOL WINAPI DECLSPEC_HOTPATCH DeleteFileW( LPCWSTR path ) } InitializeObjectAttributes( &attr, &nameW, OBJ_CASE_INSENSITIVE, 0, NULL ); - status = NtCreateFile(&hFile, SYNCHRONIZE | DELETE, &attr, &io, NULL, 0, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - FILE_OPEN, FILE_DELETE_ON_CLOSE | FILE_NON_DIRECTORY_FILE, NULL, 0); + status = NtCreateFile( &hFile, SYNCHRONIZE | DELETE, &attr, &io, NULL, 0, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, FILE_OPEN, + FILE_DELETE_ON_CLOSE | FILE_NON_DIRECTORY_FILE | FILE_OPEN_REPARSE_POINT, NULL, 0 ); if (status == STATUS_SUCCESS) status = NtClose(hFile); RtlFreeUnicodeString( &nameW ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/8540
From: "Erich E. Hoover" <erich.e.hoover(a)gmail.com> --- dlls/kernelbase/file.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c index ddd0a0b6d3d..7f0e26fd556 100644 --- a/dlls/kernelbase/file.c +++ b/dlls/kernelbase/file.c @@ -2537,7 +2537,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; @@ -2659,7 +2659,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 ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/8540
From: Elizabeth Figura <zfigura(a)codeweavers.com> --- dlls/kernelbase/file.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c index 7f0e26fd556..d797955f531 100644 --- a/dlls/kernelbase/file.c +++ b/dlls/kernelbase/file.c @@ -961,7 +961,7 @@ BOOL WINAPI CreateHardLinkW( LPCWSTR dest, LPCWSTR source, SECURITY_ATTRIBUTES * InitializeObjectAttributes( &attr, &ntSource, OBJ_CASE_INSENSITIVE, 0, NULL ); if (!(ret = set_ntstatus( NtOpenFile( &file, SYNCHRONIZE, &attr, &io, FILE_SHARE_READ | FILE_SHARE_WRITE, - FILE_SYNCHRONOUS_IO_NONALERT ) ))) + FILE_SYNCHRONOUS_IO_NONALERT | FILE_OPEN_REPARSE_POINT ) ))) goto done; info->ReplaceIfExists = FALSE; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/8540
This merge request was approved by Elizabeth Figura. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/8540
I think it would be better to change them one by one after FILE_OPEN_REPARSE_POINT starts doing something meaningful. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/8540#note_110056
Very well, I'll wait until the harder part is done then. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/8540#note_111761
This merge request was closed by Elizabeth Figura. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/8540
participants (4)
-
Alexandre Julliard (@julliard) -
Elizabeth Figura -
Elizabeth Figura (@zfigura) -
Erich E. Hoover