inc: fsctl: PassQueryDirectoryPattern

This commit is contained in:
Bill Zissimopoulos 2017-01-26 23:09:58 -08:00
parent de5ef0c81d
commit 63c23f382b
2 changed files with 8 additions and 4 deletions

View File

@ -147,7 +147,8 @@ typedef struct
UINT32 ReadOnlyVolume:1; UINT32 ReadOnlyVolume:1;
/* kernel-mode flags */ /* kernel-mode flags */
UINT32 PostCleanupWhenModifiedOnly:1; /* post Cleanup when a file was modified/deleted */ 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 */ /* user-mode flags */
UINT32 UmFileContextIsUserContext2:1; /* user mode: FileContext parameter is UserContext2 */ UINT32 UmFileContextIsUserContext2:1; /* user mode: FileContext parameter is UserContext2 */
UINT32 UmFileContextIsFullContext:1; /* user mode: FileContext parameter is FullContext */ UINT32 UmFileContextIsFullContext:1; /* user mode: FileContext parameter is FullContext */

View File

@ -565,7 +565,8 @@ static NTSTATUS FspFsvolQueryDirectoryRetry(
/* create request */ /* create request */
Result = FspIopCreateRequestEx(Irp, 0, Result = FspIopCreateRequestEx(Irp, 0,
(FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer ? (FsvolDeviceExtension->VolumeParams.PassQueryDirectoryPattern &&
FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer ?
FileDesc->DirectoryPattern.Length + sizeof(WCHAR) : 0) + FileDesc->DirectoryPattern.Length + sizeof(WCHAR) : 0) +
(FsvolDeviceExtension->VolumeParams.MaxComponentLength + 1) * sizeof(WCHAR), (FsvolDeviceExtension->VolumeParams.MaxComponentLength + 1) * sizeof(WCHAR),
FspFsvolQueryDirectoryRequestFini, &Request); FspFsvolQueryDirectoryRequestFini, &Request);
@ -581,7 +582,8 @@ static NTSTATUS FspFsvolQueryDirectoryRetry(
Request->Req.QueryDirectory.Length = SystemBufferLength; Request->Req.QueryDirectory.Length = SystemBufferLength;
Request->Req.QueryDirectory.CaseSensitive = FileDesc->CaseSensitive; 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->Req.QueryDirectory.Pattern.Offset =
Request->FileName.Size; Request->FileName.Size;
@ -925,7 +927,8 @@ NTSTATUS FspFsvolDirectoryControlComplete(
FSP_RETURN(); FSP_RETURN();
} }
if (0 == Request->Req.QueryDirectory.Marker.Size && if (0 == Request->Req.QueryDirectory.Pattern.Size &&
0 == Request->Req.QueryDirectory.Marker.Size &&
FspFileNodeTrySetDirInfo(FileNode, FspFileNodeTrySetDirInfo(FileNode,
Irp->AssociatedIrp.SystemBuffer, Irp->AssociatedIrp.SystemBuffer,
(ULONG)Response->IoStatus.Information, (ULONG)Response->IoStatus.Information,