mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 00:43:00 -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;
|
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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user