Rebase against f41f67806b9d630e7fbb0e31e3a166e84212dc9b.

This commit is contained in:
Elizabeth Figura
2025-11-25 18:00:38 -06:00
parent 463f0b7936
commit b7f859e90d
6 changed files with 20 additions and 721 deletions

View File

@@ -1,48 +0,0 @@
From 4039b5b7bd3e8df9052006c5755a63aab93d52ef Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Wed, 29 May 2019 15:11:42 -0600
Subject: kernel32: Add reparse support to FindNextFile.
Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
---
dlls/kernelbase/file.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c
index bf6e9e17c9e..26d3dde5ad6 100644
--- a/dlls/kernelbase/file.c
+++ b/dlls/kernelbase/file.c
@@ -1508,6 +1508,30 @@ BOOL WINAPI DECLSPEC_HOTPATCH FindNextFileW( HANDLE handle, WIN32_FIND_DATAW *da
memcpy( data->cFileName, dir_info->FileName, dir_info->FileNameLength );
data->cFileName[dir_info->FileNameLength/sizeof(WCHAR)] = 0;
+ /* get reparse tag */
+ if (dir_info->FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
+ {
+ INT path_len = info->path.Length + dir_info->FileNameLength + sizeof(WCHAR);
+ WCHAR *path = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, path_len );
+ FILE_ATTRIBUTE_TAG_INFORMATION taginfo;
+ IO_STATUS_BLOCK iosb;
+ NTSTATUS status;
+ HANDLE hlink;
+
+ if (!path) break;
+
+ lstrcpynW( path, info->path.Buffer, info->path.Length/sizeof(WCHAR) + 1 );
+ lstrcatW( path, data->cFileName );
+
+ hlink = CreateFileW( path, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING,
+ FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, 0 );
+ HeapFree( GetProcessHeap(), 0, path );
+ status = NtQueryInformationFile( hlink, &iosb, &taginfo, sizeof(taginfo),
+ FileAttributeTagInformation );
+ if (status == STATUS_SUCCESS) data->dwReserved0 = taginfo.ReparseTag;
+ CloseHandle( hlink );
+ }
+
if (info->level != FindExInfoBasic)
{
memcpy( data->cAlternateFileName, dir_info->ShortName, dir_info->ShortNameLength );
--
2.17.1