mirror of
https://github.com/winfsp/winfsp.git
synced 2025-06-08 04:52:10 -05:00
sys: FspFsvolQueryDirectoryCopy: fix issue #380
This commit is contained in:
parent
490d021b22
commit
3e66082f11
@ -119,6 +119,17 @@ static NTSTATUS FspFsvolQueryDirectoryCopy(
|
|||||||
DirInfo->FileInfo.FileAttributes : FILE_ATTRIBUTE_NORMAL;\
|
DirInfo->FileInfo.FileAttributes : FILE_ATTRIBUTE_NORMAL;\
|
||||||
__VA_ARGS__\
|
__VA_ARGS__\
|
||||||
)
|
)
|
||||||
|
#define FILL_INFO_EASIZE()\
|
||||||
|
if (!FlagOn(DirInfo->FileInfo.FileAttributes, FILE_ATTRIBUTE_REPARSE_POINT))\
|
||||||
|
{\
|
||||||
|
Info->EaSize = ReturnEaSize ? DirInfo->FileInfo.EaSize : 0;\
|
||||||
|
/* magic computations are courtesy of NTFS */\
|
||||||
|
if (0 != Info->EaSize)\
|
||||||
|
Info->EaSize += 4;\
|
||||||
|
}\
|
||||||
|
else\
|
||||||
|
/* Fix GitHub issue #380: turns out that the EaSize field is also used for the reparse tag */\
|
||||||
|
Info->EaSize = DirInfo->FileInfo.ReparseTag
|
||||||
|
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
@ -240,18 +251,12 @@ static NTSTATUS FspFsvolQueryDirectoryCopy(
|
|||||||
break;
|
break;
|
||||||
case FileFullDirectoryInformation:
|
case FileFullDirectoryInformation:
|
||||||
FILL_INFO(FILE_FULL_DIR_INFORMATION,
|
FILL_INFO(FILE_FULL_DIR_INFORMATION,
|
||||||
Info->EaSize = ReturnEaSize ? DirInfo->FileInfo.EaSize : 0;
|
FILL_INFO_EASIZE();
|
||||||
/* magic computations are courtesy of NTFS */
|
|
||||||
if (0 != Info->EaSize)
|
|
||||||
Info->EaSize += 4;
|
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case FileIdFullDirectoryInformation:
|
case FileIdFullDirectoryInformation:
|
||||||
FILL_INFO(FILE_ID_FULL_DIR_INFORMATION,
|
FILL_INFO(FILE_ID_FULL_DIR_INFORMATION,
|
||||||
Info->EaSize = ReturnEaSize ? DirInfo->FileInfo.EaSize : 0;
|
FILL_INFO_EASIZE();
|
||||||
/* magic computations are courtesy of NTFS */
|
|
||||||
if (0 != Info->EaSize)
|
|
||||||
Info->EaSize += 4;
|
|
||||||
Info->FileId.QuadPart = DirInfo->FileInfo.IndexNumber;
|
Info->FileId.QuadPart = DirInfo->FileInfo.IndexNumber;
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
@ -260,20 +265,14 @@ static NTSTATUS FspFsvolQueryDirectoryCopy(
|
|||||||
break;
|
break;
|
||||||
case FileBothDirectoryInformation:
|
case FileBothDirectoryInformation:
|
||||||
FILL_INFO(FILE_BOTH_DIR_INFORMATION,
|
FILL_INFO(FILE_BOTH_DIR_INFORMATION,
|
||||||
Info->EaSize = ReturnEaSize ? DirInfo->FileInfo.EaSize : 0;
|
FILL_INFO_EASIZE();
|
||||||
/* magic computations are courtesy of NTFS */
|
|
||||||
if (0 != Info->EaSize)
|
|
||||||
Info->EaSize += 4;
|
|
||||||
Info->ShortNameLength = 0;
|
Info->ShortNameLength = 0;
|
||||||
RtlZeroMemory(Info->ShortName, sizeof Info->ShortName);
|
RtlZeroMemory(Info->ShortName, sizeof Info->ShortName);
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case FileIdBothDirectoryInformation:
|
case FileIdBothDirectoryInformation:
|
||||||
FILL_INFO(FILE_ID_BOTH_DIR_INFORMATION,
|
FILL_INFO(FILE_ID_BOTH_DIR_INFORMATION,
|
||||||
Info->EaSize = ReturnEaSize ? DirInfo->FileInfo.EaSize : 0;
|
FILL_INFO_EASIZE();
|
||||||
/* magic computations are courtesy of NTFS */
|
|
||||||
if (0 != Info->EaSize)
|
|
||||||
Info->EaSize += 4;
|
|
||||||
Info->ShortNameLength = 0;
|
Info->ShortNameLength = 0;
|
||||||
RtlZeroMemory(Info->ShortName, sizeof Info->ShortName);
|
RtlZeroMemory(Info->ShortName, sizeof Info->ShortName);
|
||||||
Info->FileId.QuadPart = DirInfo->FileInfo.IndexNumber;
|
Info->FileId.QuadPart = DirInfo->FileInfo.IndexNumber;
|
||||||
@ -331,6 +330,7 @@ static NTSTATUS FspFsvolQueryDirectoryCopy(
|
|||||||
|
|
||||||
return Result;
|
return Result;
|
||||||
|
|
||||||
|
#undef FILL_INFO_EASIZE
|
||||||
#undef FILL_INFO
|
#undef FILL_INFO
|
||||||
#undef FILL_INFO_BASE
|
#undef FILL_INFO_BASE
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user