mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-24 01:13:04 -05:00
sys: FSP_FILE_DESC: rename QueryFileName to DirectoryPattern
This commit is contained in:
parent
85a2d61d31
commit
0095b3c1dc
@ -13,7 +13,7 @@ static NTSTATUS FspFsvolQueryDirectoryRetry(
|
|||||||
BOOLEAN CanWait);
|
BOOLEAN CanWait);
|
||||||
static NTSTATUS FspFsvolQueryDirectoryCopy(
|
static NTSTATUS FspFsvolQueryDirectoryCopy(
|
||||||
FILE_INFORMATION_CLASS FileInformationClass, BOOLEAN ReturnSingleEntry,
|
FILE_INFORMATION_CLASS FileInformationClass, BOOLEAN ReturnSingleEntry,
|
||||||
PUNICODE_STRING QueryFileName, BOOLEAN CaseInsensitive,
|
PUNICODE_STRING DirectoryPattern, BOOLEAN CaseInsensitive,
|
||||||
PVOID DestBuf, PULONG PDestLen,
|
PVOID DestBuf, PULONG PDestLen,
|
||||||
FSP_FSCTL_DIR_INFO *DirInfo, ULONG DirInfoSize);
|
FSP_FSCTL_DIR_INFO *DirInfo, ULONG DirInfoSize);
|
||||||
static NTSTATUS FspFsvolNotifyChangeDirectory(
|
static NTSTATUS FspFsvolNotifyChangeDirectory(
|
||||||
@ -118,10 +118,10 @@ static NTSTATUS FspFsvolQueryDirectoryRetry(
|
|||||||
if (!Success)
|
if (!Success)
|
||||||
return FspWqRepostIrpWorkItem(Irp, FspFsvolQueryDirectoryRetry, 0);
|
return FspWqRepostIrpWorkItem(Irp, FspFsvolQueryDirectoryRetry, 0);
|
||||||
|
|
||||||
InitialQuery = 0 == FileDesc->QueryFileName.Buffer;
|
InitialQuery = 0 == FileDesc->DirectoryPattern.Buffer;
|
||||||
|
|
||||||
/* set the QueryFileName in the FileDesc */
|
/* set the DirectoryPattern in the FileDesc */
|
||||||
Result = FspFileDescResetQueryFileName(FileDesc, FileName, RestartScan);
|
Result = FspFileDescResetDirectoryPattern(FileDesc, FileName, RestartScan);
|
||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
{
|
{
|
||||||
FspFileNodeRelease(FileNode, Full);
|
FspFileNodeRelease(FileNode, Full);
|
||||||
@ -130,9 +130,9 @@ static NTSTATUS FspFsvolQueryDirectoryRetry(
|
|||||||
|
|
||||||
/* determine where to (re)start */
|
/* determine where to (re)start */
|
||||||
if (IndexSpecified)
|
if (IndexSpecified)
|
||||||
FileDesc->QueryOffset = (UINT64)IrpSp->Parameters.QueryDirectory.FileIndex << 32;
|
FileDesc->DirectoryOffset = (UINT64)IrpSp->Parameters.QueryDirectory.FileIndex << 32;
|
||||||
else if (RestartScan)
|
else if (RestartScan)
|
||||||
FileDesc->QueryOffset = 0;
|
FileDesc->DirectoryOffset = 0;
|
||||||
|
|
||||||
FspFileNodeConvertExclusiveToShared(FileNode, Full);
|
FspFileNodeConvertExclusiveToShared(FileNode, Full);
|
||||||
|
|
||||||
@ -145,7 +145,7 @@ static NTSTATUS FspFsvolQueryDirectoryRetry(
|
|||||||
BOOLEAN CaseInsensitive = 0 == FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch;
|
BOOLEAN CaseInsensitive = 0 == FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch;
|
||||||
|
|
||||||
Result = FspFsvolQueryDirectoryCopy(FileInformationClass, ReturnSingleEntry,
|
Result = FspFsvolQueryDirectoryCopy(FileInformationClass, ReturnSingleEntry,
|
||||||
&FileDesc->QueryFileName, CaseInsensitive,
|
&FileDesc->DirectoryPattern, CaseInsensitive,
|
||||||
Buffer, &Length, DirInfoBuffer, DirInfoSize);
|
Buffer, &Length, DirInfoBuffer, DirInfoSize);
|
||||||
FspFileNodeDereferenceDirInfo(DirInfoBuffer);
|
FspFileNodeDereferenceDirInfo(DirInfoBuffer);
|
||||||
|
|
||||||
@ -184,7 +184,7 @@ static NTSTATUS FspFsvolQueryDirectoryRetry(
|
|||||||
|
|
||||||
static NTSTATUS FspFsvolQueryDirectoryCopy(
|
static NTSTATUS FspFsvolQueryDirectoryCopy(
|
||||||
FILE_INFORMATION_CLASS FileInformationClass, BOOLEAN ReturnSingleEntry,
|
FILE_INFORMATION_CLASS FileInformationClass, BOOLEAN ReturnSingleEntry,
|
||||||
PUNICODE_STRING QueryFileName, BOOLEAN CaseInsensitive,
|
PUNICODE_STRING DirectoryPattern, BOOLEAN CaseInsensitive,
|
||||||
PVOID DestBuf, PULONG PDestLen,
|
PVOID DestBuf, PULONG PDestLen,
|
||||||
FSP_FSCTL_DIR_INFO *DirInfo, ULONG DirInfoSize)
|
FSP_FSCTL_DIR_INFO *DirInfo, ULONG DirInfoSize)
|
||||||
{
|
{
|
||||||
@ -204,7 +204,7 @@ static NTSTATUS FspFsvolQueryDirectoryCopy(
|
|||||||
|
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
BOOLEAN MatchAll = FspFileDescQueryFileNameMatchAll == QueryFileName->Buffer;
|
BOOLEAN MatchAll = FspFileDescDirectoryPatternMatchAll == DirectoryPattern->Buffer;
|
||||||
PVOID PrevDestBuf = 0;
|
PVOID PrevDestBuf = 0;
|
||||||
PUINT8 DestBufBgn = (PUINT8)DestBuf;
|
PUINT8 DestBufBgn = (PUINT8)DestBuf;
|
||||||
PUINT8 DestBufEnd = (PUINT8)DestBuf + *PDestLen;
|
PUINT8 DestBufEnd = (PUINT8)DestBuf + *PDestLen;
|
||||||
@ -250,7 +250,7 @@ static NTSTATUS FspFsvolQueryDirectoryCopy(
|
|||||||
FileName.Length = FileName.MaximumLength = (USHORT)FileNameLen;
|
FileName.Length = FileName.MaximumLength = (USHORT)FileNameLen;
|
||||||
FileName.Buffer = DirInfo->FileNameBuf;
|
FileName.Buffer = DirInfo->FileNameBuf;
|
||||||
|
|
||||||
if (MatchAll || FsRtlIsNameInExpression(QueryFileName, &FileName, CaseInsensitive, 0))
|
if (MatchAll || FsRtlIsNameInExpression(DirectoryPattern, &FileName, CaseInsensitive, 0))
|
||||||
{
|
{
|
||||||
if ((PUINT8)DestBuf + FSP_FSCTL_ALIGN_UP(BaseInfoLen + FileNameLen, sizeof(LONGLONG)) >
|
if ((PUINT8)DestBuf + FSP_FSCTL_ALIGN_UP(BaseInfoLen + FileNameLen, sizeof(LONGLONG)) >
|
||||||
DestBufEnd)
|
DestBufEnd)
|
||||||
|
@ -626,7 +626,7 @@ enum
|
|||||||
FspFsvolDeviceSecurityCacheCapacity = 100,
|
FspFsvolDeviceSecurityCacheCapacity = 100,
|
||||||
FspFsvolDeviceSecurityCacheItemSizeMax = 4096,
|
FspFsvolDeviceSecurityCacheItemSizeMax = 4096,
|
||||||
FspFsvolDeviceDirInfoCacheCapacity = 100,
|
FspFsvolDeviceDirInfoCacheCapacity = 100,
|
||||||
FspFsvolDeviceDirInfoCacheItemSizeMax = 16384,
|
FspFsvolDeviceDirInfoCacheItemSizeMax = FSP_FSCTL_ALIGN_UP(16384, PAGE_SIZE),
|
||||||
};
|
};
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -834,8 +834,9 @@ typedef struct
|
|||||||
FSP_FILE_NODE *FileNode;
|
FSP_FILE_NODE *FileNode;
|
||||||
UINT64 UserContext2;
|
UINT64 UserContext2;
|
||||||
BOOLEAN DeleteOnClose;
|
BOOLEAN DeleteOnClose;
|
||||||
UNICODE_STRING QueryFileName;
|
UNICODE_STRING DirectoryPattern;
|
||||||
UINT64 QueryOffset;
|
UINT64 DirectoryOffset;
|
||||||
|
ULONG DirInfoCacheHint;
|
||||||
} FSP_FILE_DESC;
|
} FSP_FILE_DESC;
|
||||||
NTSTATUS FspFileNodeCreate(PDEVICE_OBJECT DeviceObject,
|
NTSTATUS FspFileNodeCreate(PDEVICE_OBJECT DeviceObject,
|
||||||
ULONG ExtraSize, FSP_FILE_NODE **PFileNode);
|
ULONG ExtraSize, FSP_FILE_NODE **PFileNode);
|
||||||
@ -888,7 +889,7 @@ BOOLEAN FspFileNodeTrySetDirInfo(FSP_FILE_NODE *FileNode, PCVOID Buffer, ULONG S
|
|||||||
VOID FspFileNodeInvalidateParentDirInfo(FSP_FILE_NODE *FileNode);
|
VOID FspFileNodeInvalidateParentDirInfo(FSP_FILE_NODE *FileNode);
|
||||||
NTSTATUS FspFileDescCreate(FSP_FILE_DESC **PFileDesc);
|
NTSTATUS FspFileDescCreate(FSP_FILE_DESC **PFileDesc);
|
||||||
VOID FspFileDescDelete(FSP_FILE_DESC *FileDesc);
|
VOID FspFileDescDelete(FSP_FILE_DESC *FileDesc);
|
||||||
NTSTATUS FspFileDescResetQueryFileName(FSP_FILE_DESC *FileDesc,
|
NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc,
|
||||||
PUNICODE_STRING FileName, BOOLEAN Reset);
|
PUNICODE_STRING FileName, BOOLEAN Reset);
|
||||||
#define FspFileNodeAcquireShared(N,F) FspFileNodeAcquireSharedF(N, FspFileNodeAcquire ## F)
|
#define FspFileNodeAcquireShared(N,F) FspFileNodeAcquireSharedF(N, FspFileNodeAcquire ## F)
|
||||||
#define FspFileNodeTryAcquireShared(N,F) FspFileNodeTryAcquireSharedF(N, FspFileNodeAcquire ## F, FALSE)
|
#define FspFileNodeTryAcquireShared(N,F) FspFileNodeTryAcquireSharedF(N, FspFileNodeAcquire ## F, FALSE)
|
||||||
@ -936,7 +937,7 @@ extern FAST_IO_DISPATCH FspFastIoDispatch;
|
|||||||
extern CACHE_MANAGER_CALLBACKS FspCacheManagerCallbacks;
|
extern CACHE_MANAGER_CALLBACKS FspCacheManagerCallbacks;
|
||||||
extern FSP_IOPREP_DISPATCH *FspIopPrepareFunction[];
|
extern FSP_IOPREP_DISPATCH *FspIopPrepareFunction[];
|
||||||
extern FSP_IOCMPL_DISPATCH *FspIopCompleteFunction[];
|
extern FSP_IOCMPL_DISPATCH *FspIopCompleteFunction[];
|
||||||
extern WCHAR FspFileDescQueryFileNameMatchAll[];
|
extern WCHAR FspFileDescDirectoryPatternMatchAll[];
|
||||||
|
|
||||||
/* multiversion support */
|
/* multiversion support */
|
||||||
typedef
|
typedef
|
||||||
|
@ -45,7 +45,7 @@ BOOLEAN FspFileNodeTrySetDirInfo(FSP_FILE_NODE *FileNode, PCVOID Buffer, ULONG S
|
|||||||
VOID FspFileNodeInvalidateParentDirInfo(FSP_FILE_NODE *FileNode);
|
VOID FspFileNodeInvalidateParentDirInfo(FSP_FILE_NODE *FileNode);
|
||||||
NTSTATUS FspFileDescCreate(FSP_FILE_DESC **PFileDesc);
|
NTSTATUS FspFileDescCreate(FSP_FILE_DESC **PFileDesc);
|
||||||
VOID FspFileDescDelete(FSP_FILE_DESC *FileDesc);
|
VOID FspFileDescDelete(FSP_FILE_DESC *FileDesc);
|
||||||
NTSTATUS FspFileDescResetQueryFileName(FSP_FILE_DESC *FileDesc,
|
NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc,
|
||||||
PUNICODE_STRING FileName, BOOLEAN Reset);
|
PUNICODE_STRING FileName, BOOLEAN Reset);
|
||||||
|
|
||||||
#ifdef ALLOC_PRAGMA
|
#ifdef ALLOC_PRAGMA
|
||||||
@ -79,7 +79,7 @@ NTSTATUS FspFileDescResetQueryFileName(FSP_FILE_DESC *FileDesc,
|
|||||||
// !#pragma alloc_text(PAGE, FspFileNodeInvalidateParentDirInfo)
|
// !#pragma alloc_text(PAGE, FspFileNodeInvalidateParentDirInfo)
|
||||||
#pragma alloc_text(PAGE, FspFileDescCreate)
|
#pragma alloc_text(PAGE, FspFileDescCreate)
|
||||||
#pragma alloc_text(PAGE, FspFileDescDelete)
|
#pragma alloc_text(PAGE, FspFileDescDelete)
|
||||||
#pragma alloc_text(PAGE, FspFileDescResetQueryFileName)
|
#pragma alloc_text(PAGE, FspFileDescResetDirectoryPattern)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define FSP_FILE_NODE_GET_FLAGS() \
|
#define FSP_FILE_NODE_GET_FLAGS() \
|
||||||
@ -879,70 +879,70 @@ VOID FspFileDescDelete(FSP_FILE_DESC *FileDesc)
|
|||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
if (0 != FileDesc->QueryFileName.Buffer &&
|
if (0 != FileDesc->DirectoryPattern.Buffer &&
|
||||||
FspFileDescQueryFileNameMatchAll != FileDesc->QueryFileName.Buffer)
|
FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer)
|
||||||
{
|
{
|
||||||
PDEVICE_OBJECT FsvolDeviceObject = FileDesc->FileNode->FsvolDeviceObject;
|
PDEVICE_OBJECT FsvolDeviceObject = FileDesc->FileNode->FsvolDeviceObject;
|
||||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension =
|
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension =
|
||||||
FspFsvolDeviceExtension(FsvolDeviceObject);
|
FspFsvolDeviceExtension(FsvolDeviceObject);
|
||||||
|
|
||||||
if (FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch)
|
if (FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch)
|
||||||
FspFree(FileDesc->QueryFileName.Buffer);
|
FspFree(FileDesc->DirectoryPattern.Buffer);
|
||||||
else
|
else
|
||||||
RtlFreeUnicodeString(&FileDesc->QueryFileName);
|
RtlFreeUnicodeString(&FileDesc->DirectoryPattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
FspFree(FileDesc);
|
FspFree(FileDesc);
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS FspFileDescResetQueryFileName(FSP_FILE_DESC *FileDesc,
|
NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc,
|
||||||
PUNICODE_STRING FileName, BOOLEAN Reset)
|
PUNICODE_STRING FileName, BOOLEAN Reset)
|
||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
if (Reset || 0 == FileDesc->QueryFileName.Buffer)
|
if (Reset || 0 == FileDesc->DirectoryPattern.Buffer)
|
||||||
{
|
{
|
||||||
PDEVICE_OBJECT FsvolDeviceObject = FileDesc->FileNode->FsvolDeviceObject;
|
PDEVICE_OBJECT FsvolDeviceObject = FileDesc->FileNode->FsvolDeviceObject;
|
||||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension =
|
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension =
|
||||||
FspFsvolDeviceExtension(FsvolDeviceObject);
|
FspFsvolDeviceExtension(FsvolDeviceObject);
|
||||||
UNICODE_STRING QueryFileName;
|
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]))
|
||||||
{
|
{
|
||||||
QueryFileName.Length = QueryFileName.MaximumLength = sizeof(WCHAR); /* L"*" */
|
DirectoryPattern.Length = DirectoryPattern.MaximumLength = sizeof(WCHAR); /* L"*" */
|
||||||
QueryFileName.Buffer = FspFileDescQueryFileNameMatchAll;
|
DirectoryPattern.Buffer = FspFileDescDirectoryPatternMatchAll;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch)
|
if (FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch)
|
||||||
{
|
{
|
||||||
QueryFileName.Length = QueryFileName.MaximumLength = FileName->Length;
|
DirectoryPattern.Length = DirectoryPattern.MaximumLength = FileName->Length;
|
||||||
QueryFileName.Buffer = FspAlloc(FileName->Length);
|
DirectoryPattern.Buffer = FspAlloc(FileName->Length);
|
||||||
if (0 == QueryFileName.Buffer)
|
if (0 == DirectoryPattern.Buffer)
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
RtlCopyMemory(QueryFileName.Buffer, FileName->Buffer, FileName->Length);
|
RtlCopyMemory(DirectoryPattern.Buffer, FileName->Buffer, FileName->Length);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
NTSTATUS Result = RtlUpcaseUnicodeString(&QueryFileName, FileName, TRUE);
|
NTSTATUS Result = RtlUpcaseUnicodeString(&DirectoryPattern, FileName, TRUE);
|
||||||
if (NT_SUCCESS(Result))
|
if (NT_SUCCESS(Result))
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0 != FileDesc->QueryFileName.Buffer &&
|
if (0 != FileDesc->DirectoryPattern.Buffer &&
|
||||||
FspFileDescQueryFileNameMatchAll != FileDesc->QueryFileName.Buffer)
|
FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer)
|
||||||
{
|
{
|
||||||
if (FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch)
|
if (FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch)
|
||||||
FspFree(FileDesc->QueryFileName.Buffer);
|
FspFree(FileDesc->DirectoryPattern.Buffer);
|
||||||
else
|
else
|
||||||
RtlFreeUnicodeString(&FileDesc->QueryFileName);
|
RtlFreeUnicodeString(&FileDesc->DirectoryPattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
FileDesc->QueryFileName = QueryFileName;
|
FileDesc->DirectoryPattern = DirectoryPattern;
|
||||||
}
|
}
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
WCHAR FspFileDescQueryFileNameMatchAll[] = L"*";
|
WCHAR FspFileDescDirectoryPatternMatchAll[] = L"*";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user