mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-30 19:48:38 -05:00 
			
		
		
		
	sys: FSP_FILE_DESC: rename QueryFileName to DirectoryPattern
This commit is contained in:
		| @@ -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"*"; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user