inc: fsctl: FSP_FSCTL_TRANSACT_REQ QueryDirectory: CaseSensitive

This commit is contained in:
Bill Zissimopoulos 2016-12-09 15:35:55 -08:00
parent 945509ef93
commit 0b61c48cd6
4 changed files with 9 additions and 6 deletions

View File

@ -173,7 +173,7 @@ typedef struct
UINT64 LastWriteTime; UINT64 LastWriteTime;
UINT64 ChangeTime; UINT64 ChangeTime;
UINT64 IndexNumber; UINT64 IndexNumber;
UINT32 HardLinks; /* currently unused: set to 0 */ UINT32 HardLinks; /* unimplemented: set to 0 */
} FSP_FSCTL_FILE_INFO; } FSP_FSCTL_FILE_INFO;
typedef struct typedef struct
{ {
@ -334,6 +334,7 @@ typedef struct
UINT64 Offset; UINT64 Offset;
UINT32 Length; UINT32 Length;
FSP_FSCTL_TRANSACT_BUF Pattern; FSP_FSCTL_TRANSACT_BUF Pattern;
UINT32 CaseSensitive:1; /* FileName comparisons should be case-sensitive */
} QueryDirectory; } QueryDirectory;
struct struct
{ {

View File

@ -1002,7 +1002,9 @@ static inline
BOOLEAN FspFileSystemIsOperationCaseSensitive(VOID) BOOLEAN FspFileSystemIsOperationCaseSensitive(VOID)
{ {
FSP_FSCTL_TRANSACT_REQ *Request = FspFileSystemGetOperationContext()->Request; FSP_FSCTL_TRANSACT_REQ *Request = FspFileSystemGetOperationContext()->Request;
return FspFsctlTransactCreateKind == Request->Kind && Request->Req.Create.CaseSensitive; return
FspFsctlTransactCreateKind == Request->Kind && Request->Req.Create.CaseSensitive ||
FspFsctlTransactQueryDirectoryKind == Request->Kind && Request->Req.QueryDirectory.CaseSensitive;
} }
/* /*

View File

@ -184,10 +184,9 @@ static NTSTATUS FspFsvolCreateNoLock(
ULONG Flags = IrpSp->Flags; ULONG Flags = IrpSp->Flags;
KPROCESSOR_MODE RequestorMode = KPROCESSOR_MODE RequestorMode =
FlagOn(Flags, SL_FORCE_ACCESS_CHECK) ? UserMode : Irp->RequestorMode; FlagOn(Flags, SL_FORCE_ACCESS_CHECK) ? UserMode : Irp->RequestorMode;
BOOLEAN CaseSensitiveRequested =
BooleanFlagOn(Flags, SL_CASE_SENSITIVE);
BOOLEAN CaseSensitive = BOOLEAN CaseSensitive =
CaseSensitiveRequested || FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch; //BooleanFlagOn(Flags, SL_CASE_SENSITIVE) ||
!!FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch;
BOOLEAN HasTraversePrivilege = BOOLEAN HasTraversePrivilege =
BooleanFlagOn(AccessState->Flags, TOKEN_HAS_TRAVERSE_PRIVILEGE); BooleanFlagOn(AccessState->Flags, TOKEN_HAS_TRAVERSE_PRIVILEGE);
BOOLEAN HasBackupPrivilege = BOOLEAN HasBackupPrivilege =
@ -501,7 +500,7 @@ static NTSTATUS FspFsvolCreateNoLock(
Request->Req.Create.HasBackupPrivilege = HasBackupPrivilege; Request->Req.Create.HasBackupPrivilege = HasBackupPrivilege;
Request->Req.Create.HasRestorePrivilege = HasRestorePrivilege; Request->Req.Create.HasRestorePrivilege = HasRestorePrivilege;
Request->Req.Create.OpenTargetDirectory = BooleanFlagOn(Flags, SL_OPEN_TARGET_DIRECTORY); Request->Req.Create.OpenTargetDirectory = BooleanFlagOn(Flags, SL_OPEN_TARGET_DIRECTORY);
Request->Req.Create.CaseSensitive = CaseSensitiveRequested; Request->Req.Create.CaseSensitive = CaseSensitive;
Request->Req.Create.NamedStream = MainFileName.Length; Request->Req.Create.NamedStream = MainFileName.Length;
ASSERT( ASSERT(

View File

@ -584,6 +584,7 @@ static NTSTATUS FspFsvolQueryDirectoryRetry(
Request->Req.QueryDirectory.UserContext2 = FileDesc->UserContext2; Request->Req.QueryDirectory.UserContext2 = FileDesc->UserContext2;
Request->Req.QueryDirectory.Offset = FileDesc->DirectoryOffset; Request->Req.QueryDirectory.Offset = FileDesc->DirectoryOffset;
Request->Req.QueryDirectory.Length = SystemBufferLength; Request->Req.QueryDirectory.Length = SystemBufferLength;
Request->Req.QueryDirectory.CaseSensitive = FileDesc->CaseSensitive;
if (FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer) if (FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer)
{ {