From 9a4f04f46aa8a20f4eba5d4a8e91a19e80f5d25e Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Fri, 29 Sep 2017 15:44:49 -0700 Subject: [PATCH] sys: FspFsvolQueryDirectoryRetry: special handling for when pattern is filename --- src/sys/dirctl.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/sys/dirctl.c b/src/sys/dirctl.c index 59e4d851..5637521e 100644 --- a/src/sys/dirctl.c +++ b/src/sys/dirctl.c @@ -557,6 +557,22 @@ static NTSTATUS FspFsvolQueryDirectoryRetry( FspFileNodeConvertExclusiveToShared(FileNode, Full); + /* special handling when pattern is filename */ + PatternIsFileName = FsvolDeviceExtension->VolumeParams.PassQueryDirectoryFileName && + !FsRtlDoesNameContainWildCards(&FileDesc->DirectoryPattern); + PassQueryDirectoryPattern = PatternIsFileName || + (FsvolDeviceExtension->VolumeParams.PassQueryDirectoryPattern && + FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer); + if (PatternIsFileName && + 0 != FileDesc->DirectoryMarker.Buffer && + 0 == FspFileNameCompare(&FileDesc->DirectoryPattern, &FileDesc->DirectoryMarker, + !FileDesc->CaseSensitive, 0)) + { + FspFileNodeRelease(FileNode, Full); + return !FileDesc->DirectoryHasSuchFile ? + STATUS_NO_SUCH_FILE : STATUS_NO_MORE_FILES; + } + /* buffer the user buffer! */ Result = FspFsvolQueryDirectoryBufferUserBuffer( FsvolDeviceExtension, Irp, &SystemBufferLength); @@ -567,11 +583,6 @@ static NTSTATUS FspFsvolQueryDirectoryRetry( } /* create request */ - PatternIsFileName = FsvolDeviceExtension->VolumeParams.PassQueryDirectoryFileName && - !FsRtlDoesNameContainWildCards(&FileDesc->DirectoryPattern); - PassQueryDirectoryPattern = PatternIsFileName || - (FsvolDeviceExtension->VolumeParams.PassQueryDirectoryPattern && - FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer); Result = FspIopCreateRequestEx(Irp, 0, (PassQueryDirectoryPattern ? FileDesc->DirectoryPattern.Length + sizeof(WCHAR) : 0) + (FsvolDeviceExtension->VolumeParams.MaxComponentLength + 1) * sizeof(WCHAR),