diff --git a/inc/winfsp/fsctl.h b/inc/winfsp/fsctl.h index 2977f300..5ec57d86 100644 --- a/inc/winfsp/fsctl.h +++ b/inc/winfsp/fsctl.h @@ -147,7 +147,8 @@ typedef struct UINT32 ReadOnlyVolume:1; /* kernel-mode flags */ UINT32 PostCleanupWhenModifiedOnly:1; /* post Cleanup when a file was modified/deleted */ - UINT32 KmReservedFlags:5; + UINT32 PassQueryDirectoryPattern:1; /* pass Pattern during QueryDirectory operations */ + UINT32 KmReservedFlags:4; /* user-mode flags */ UINT32 UmFileContextIsUserContext2:1; /* user mode: FileContext parameter is UserContext2 */ UINT32 UmFileContextIsFullContext:1; /* user mode: FileContext parameter is FullContext */ diff --git a/src/sys/dirctl.c b/src/sys/dirctl.c index bb6d95c3..dddf4196 100644 --- a/src/sys/dirctl.c +++ b/src/sys/dirctl.c @@ -565,7 +565,8 @@ static NTSTATUS FspFsvolQueryDirectoryRetry( /* create request */ Result = FspIopCreateRequestEx(Irp, 0, - (FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer ? + (FsvolDeviceExtension->VolumeParams.PassQueryDirectoryPattern && + FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer ? FileDesc->DirectoryPattern.Length + sizeof(WCHAR) : 0) + (FsvolDeviceExtension->VolumeParams.MaxComponentLength + 1) * sizeof(WCHAR), FspFsvolQueryDirectoryRequestFini, &Request); @@ -581,7 +582,8 @@ static NTSTATUS FspFsvolQueryDirectoryRetry( Request->Req.QueryDirectory.Length = SystemBufferLength; Request->Req.QueryDirectory.CaseSensitive = FileDesc->CaseSensitive; - if (FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer) + if (FsvolDeviceExtension->VolumeParams.PassQueryDirectoryPattern && + FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer) { Request->Req.QueryDirectory.Pattern.Offset = Request->FileName.Size; @@ -925,7 +927,8 @@ NTSTATUS FspFsvolDirectoryControlComplete( FSP_RETURN(); } - if (0 == Request->Req.QueryDirectory.Marker.Size && + if (0 == Request->Req.QueryDirectory.Pattern.Size && + 0 == Request->Req.QueryDirectory.Marker.Size && FspFileNodeTrySetDirInfo(FileNode, Irp->AssociatedIrp.SystemBuffer, (ULONG)Response->IoStatus.Information,