dll: GetDirInfoByName: properly handle marker for kernel cached directories

This commit is contained in:
Bill Zissimopoulos 2017-09-28 14:05:55 -07:00
parent c70089a176
commit 6430b386da

View File

@ -1122,7 +1122,7 @@ FSP_API NTSTATUS FspFileSystemOpSetVolumeInformation(FSP_FILE_SYSTEM *FileSystem
} }
static NTSTATUS FspFileSystemOpQueryDirectory_GetDirInfoByName(FSP_FILE_SYSTEM *FileSystem, static NTSTATUS FspFileSystemOpQueryDirectory_GetDirInfoByName(FSP_FILE_SYSTEM *FileSystem,
PVOID FileContext, PWSTR FileName, BOOLEAN HasMarker, PVOID FileContext, PWSTR FileName, PWSTR Marker, BOOLEAN CaseSensitive,
PVOID Buffer, ULONG Length, PULONG PBytesTransferred) PVOID Buffer, ULONG Length, PULONG PBytesTransferred)
{ {
NTSTATUS Result; NTSTATUS Result;
@ -1132,8 +1132,11 @@ static NTSTATUS FspFileSystemOpQueryDirectory_GetDirInfoByName(FSP_FILE_SYSTEM *
UINT8 B[sizeof(FSP_FSCTL_DIR_INFO) + 255 * sizeof(WCHAR)]; UINT8 B[sizeof(FSP_FSCTL_DIR_INFO) + 255 * sizeof(WCHAR)];
} DirInfoBuf; } DirInfoBuf;
FSP_FSCTL_DIR_INFO *DirInfo = &DirInfoBuf.V; FSP_FSCTL_DIR_INFO *DirInfo = &DirInfoBuf.V;
BOOLEAN HasMarker;
memset(DirInfo, 0, sizeof *DirInfo); memset(DirInfo, 0, sizeof *DirInfo);
HasMarker = 0 != Marker &&
0 == (CaseSensitive ? invariant_wcscmp : invariant_wcsicmp)(FileName, Marker);
if (!HasMarker) if (!HasMarker)
{ {
@ -1174,7 +1177,9 @@ FSP_API NTSTATUS FspFileSystemOpQueryDirectory(FSP_FILE_SYSTEM *FileSystem,
Result = FspFileSystemOpQueryDirectory_GetDirInfoByName(FileSystem, Result = FspFileSystemOpQueryDirectory_GetDirInfoByName(FileSystem,
(PVOID)ValOfFileContext(Request->Req.QueryDirectory), (PVOID)ValOfFileContext(Request->Req.QueryDirectory),
(PWSTR)(Request->Buffer + Request->Req.QueryDirectory.Pattern.Offset), (PWSTR)(Request->Buffer + Request->Req.QueryDirectory.Pattern.Offset),
0 != Request->Req.QueryDirectory.Marker.Size, 0 != Request->Req.QueryDirectory.Marker.Size ?
(PWSTR)(Request->Buffer + Request->Req.QueryDirectory.Marker.Offset) : 0,
Request->Req.QueryDirectory.CaseSensitive,
(PVOID)Request->Req.QueryDirectory.Address, (PVOID)Request->Req.QueryDirectory.Address,
Request->Req.QueryDirectory.Length, Request->Req.QueryDirectory.Length,
&BytesTransferred); &BytesTransferred);