diff --git a/inc/winfsp/fsctl.h b/inc/winfsp/fsctl.h index f9d9dd70..7d43d82c 100644 --- a/inc/winfsp/fsctl.h +++ b/inc/winfsp/fsctl.h @@ -173,7 +173,7 @@ typedef struct UINT64 LastWriteTime; UINT64 ChangeTime; UINT64 IndexNumber; - UINT32 HardLinks; /* currently unused: set to 0 */ + UINT32 HardLinks; /* unimplemented: set to 0 */ } FSP_FSCTL_FILE_INFO; typedef struct { @@ -334,6 +334,7 @@ typedef struct UINT64 Offset; UINT32 Length; FSP_FSCTL_TRANSACT_BUF Pattern; + UINT32 CaseSensitive:1; /* FileName comparisons should be case-sensitive */ } QueryDirectory; struct { diff --git a/inc/winfsp/winfsp.h b/inc/winfsp/winfsp.h index c5e06a9e..bb1115ae 100644 --- a/inc/winfsp/winfsp.h +++ b/inc/winfsp/winfsp.h @@ -1002,7 +1002,9 @@ static inline BOOLEAN FspFileSystemIsOperationCaseSensitive(VOID) { 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; } /* diff --git a/src/sys/create.c b/src/sys/create.c index 3e89630b..1cbe6d63 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -184,10 +184,9 @@ static NTSTATUS FspFsvolCreateNoLock( ULONG Flags = IrpSp->Flags; KPROCESSOR_MODE RequestorMode = FlagOn(Flags, SL_FORCE_ACCESS_CHECK) ? UserMode : Irp->RequestorMode; - BOOLEAN CaseSensitiveRequested = - BooleanFlagOn(Flags, SL_CASE_SENSITIVE); BOOLEAN CaseSensitive = - CaseSensitiveRequested || FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch; + //BooleanFlagOn(Flags, SL_CASE_SENSITIVE) || + !!FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch; BOOLEAN HasTraversePrivilege = BooleanFlagOn(AccessState->Flags, TOKEN_HAS_TRAVERSE_PRIVILEGE); BOOLEAN HasBackupPrivilege = @@ -501,7 +500,7 @@ static NTSTATUS FspFsvolCreateNoLock( Request->Req.Create.HasBackupPrivilege = HasBackupPrivilege; Request->Req.Create.HasRestorePrivilege = HasRestorePrivilege; 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; ASSERT( diff --git a/src/sys/dirctl.c b/src/sys/dirctl.c index cd520e31..af5b2af0 100644 --- a/src/sys/dirctl.c +++ b/src/sys/dirctl.c @@ -584,6 +584,7 @@ static NTSTATUS FspFsvolQueryDirectoryRetry( Request->Req.QueryDirectory.UserContext2 = FileDesc->UserContext2; Request->Req.QueryDirectory.Offset = FileDesc->DirectoryOffset; Request->Req.QueryDirectory.Length = SystemBufferLength; + Request->Req.QueryDirectory.CaseSensitive = FileDesc->CaseSensitive; if (FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer) {