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