mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-30 19:48:38 -05:00 
			
		
		
		
	sys: FSP_FILE_DESC::CaseSensitive
This commit is contained in:
		| @@ -64,8 +64,10 @@ static NTSTATUS FspFsvolClose( | ||||
|     Request->Req.Close.UserContext2 = FileDesc->UserContext2; | ||||
|  | ||||
|     FspFileNodeClose(FileNode, FileObject); | ||||
|     FspFileNodeDereference(FileNode); | ||||
|  | ||||
|     /* delete the FileDesc and deref the FileNode; order is important (FileDesc has FileNode ref) */ | ||||
|     FspFileDescDelete(FileDesc); | ||||
|     FspFileNodeDereference(FileNode); | ||||
|  | ||||
|     /* | ||||
|      * Post as a BestEffort work request. This allows us to complete our own IRP | ||||
|   | ||||
| @@ -334,6 +334,9 @@ static NTSTATUS FspFsvolCreateNoLock( | ||||
|      * delete the Request and any associated resources. | ||||
|      */ | ||||
|     FileDesc->FileNode = FileNode; | ||||
|     FileDesc->CaseSensitive = | ||||
|         0 != FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch || | ||||
|         BooleanFlagOn(Flags, SL_CASE_SENSITIVE); | ||||
|     FspFsvolDeviceFileRenameSetOwner(FsvolDeviceObject, Request); | ||||
|     FspIopRequestContext(Request, RequestDeviceObject) = FsvolDeviceObject; | ||||
|     FspIopRequestContext(Request, RequestFileDesc) = FileDesc; | ||||
|   | ||||
| @@ -265,9 +265,7 @@ static NTSTATUS FspFsvolQueryDirectoryCopyCache( | ||||
|     FileDesc->DirInfo = FileNode->NonPaged->DirInfo; | ||||
|  | ||||
|     NTSTATUS Result; | ||||
|     PDEVICE_OBJECT FsvolDeviceObject = FileNode->FsvolDeviceObject; | ||||
|     FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject); | ||||
|     BOOLEAN CaseInsensitive = 0 == FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch; | ||||
|     BOOLEAN CaseInsensitive = !FileDesc->CaseSensitive; | ||||
|     PUNICODE_STRING DirectoryPattern = &FileDesc->DirectoryPattern; | ||||
|     UINT64 DirectoryOffset = FileDesc->DirectoryOffset; | ||||
|     PUINT8 DirInfoBgn = (PUINT8)DirInfo; | ||||
| @@ -304,10 +302,7 @@ static NTSTATUS FspFsvolQueryDirectoryCopyInPlace( | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     NTSTATUS Result; | ||||
|     FSP_FILE_NODE *FileNode = FileDesc->FileNode; | ||||
|     PDEVICE_OBJECT FsvolDeviceObject = FileNode->FsvolDeviceObject; | ||||
|     FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject); | ||||
|     BOOLEAN CaseInsensitive = 0 == FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch; | ||||
|     BOOLEAN CaseInsensitive = !FileDesc->CaseSensitive; | ||||
|     PUNICODE_STRING DirectoryPattern = &FileDesc->DirectoryPattern; | ||||
|     UINT64 DirectoryOffset = FileDesc->DirectoryOffset; | ||||
|  | ||||
|   | ||||
| @@ -833,6 +833,7 @@ typedef struct | ||||
| { | ||||
|     FSP_FILE_NODE *FileNode; | ||||
|     UINT64 UserContext2; | ||||
|     BOOLEAN CaseSensitive; | ||||
|     BOOLEAN DeleteOnClose; | ||||
|     UNICODE_STRING DirectoryPattern; | ||||
|     UINT64 DirectoryOffset; | ||||
|   | ||||
| @@ -882,11 +882,7 @@ VOID FspFileDescDelete(FSP_FILE_DESC *FileDesc) | ||||
|     if (0 != FileDesc->DirectoryPattern.Buffer && | ||||
|         FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer) | ||||
|     { | ||||
|         PDEVICE_OBJECT FsvolDeviceObject = FileDesc->FileNode->FsvolDeviceObject; | ||||
|         FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = | ||||
|             FspFsvolDeviceExtension(FsvolDeviceObject); | ||||
|  | ||||
|         if (FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch) | ||||
|         if (FileDesc->CaseSensitive) | ||||
|             FspFree(FileDesc->DirectoryPattern.Buffer); | ||||
|         else | ||||
|             RtlFreeUnicodeString(&FileDesc->DirectoryPattern); | ||||
| @@ -902,9 +898,6 @@ NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc, | ||||
|  | ||||
|     if (Reset || 0 == FileDesc->DirectoryPattern.Buffer) | ||||
|     { | ||||
|         PDEVICE_OBJECT FsvolDeviceObject = FileDesc->FileNode->FsvolDeviceObject; | ||||
|         FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = | ||||
|             FspFsvolDeviceExtension(FsvolDeviceObject); | ||||
|         UNICODE_STRING DirectoryPattern; | ||||
|  | ||||
|         if (0 == FileName || (sizeof(WCHAR) == FileName->Length && L'*' == FileName->Buffer[0])) | ||||
| @@ -914,7 +907,7 @@ NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc, | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             if (FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch) | ||||
|             if (FileDesc->CaseSensitive) | ||||
|             { | ||||
|                 DirectoryPattern.Length = DirectoryPattern.MaximumLength = FileName->Length; | ||||
|                 DirectoryPattern.Buffer = FspAlloc(FileName->Length); | ||||
| @@ -925,7 +918,7 @@ NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc, | ||||
|             else | ||||
|             { | ||||
|                 NTSTATUS Result = RtlUpcaseUnicodeString(&DirectoryPattern, FileName, TRUE); | ||||
|                 if (NT_SUCCESS(Result)) | ||||
|                 if (!NT_SUCCESS(Result)) | ||||
|                     return Result; | ||||
|             } | ||||
|         } | ||||
| @@ -933,7 +926,7 @@ NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc, | ||||
|         if (0 != FileDesc->DirectoryPattern.Buffer && | ||||
|             FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer) | ||||
|         { | ||||
|             if (FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch) | ||||
|             if (FileDesc->CaseSensitive) | ||||
|                 FspFree(FileDesc->DirectoryPattern.Buffer); | ||||
|             else | ||||
|                 RtlFreeUnicodeString(&FileDesc->DirectoryPattern); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user