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