mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
sys: FSP_FILE_DESC::CaseSensitive
This commit is contained in:
parent
b5f37e2a40
commit
344afa5e42
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user