mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-30 19:48:38 -05:00 
			
		
		
		
	sys: IRP_MJ_DIRECTORY_CONTROL: DirectoryHasSuchFile
This commit is contained in:
		| @@ -280,10 +280,12 @@ static NTSTATUS FspFsvolQueryDirectoryCopyCache( | |||||||
|  |  | ||||||
|     if (NT_SUCCESS(Result)) |     if (NT_SUCCESS(Result)) | ||||||
|     { |     { | ||||||
|  |         if (0 != *PDestLen) | ||||||
|  |             FileDesc->DirectoryHasSuchFile = TRUE; | ||||||
|         FileDesc->DirectoryOffset = DirectoryOffset; |         FileDesc->DirectoryOffset = DirectoryOffset; | ||||||
|         FileDesc->DirInfoCacheHint = (ULONG)((PUINT8)DirInfo - DirInfoBgn); |         FileDesc->DirInfoCacheHint = (ULONG)((PUINT8)DirInfo - DirInfoBgn); | ||||||
|     } |     } | ||||||
|     else if (STATUS_NO_MORE_FILES == Result && 0 == FileDesc->DirectoryOffset) |     else if (STATUS_NO_MORE_FILES == Result && !FileDesc->DirectoryHasSuchFile) | ||||||
|         Result = STATUS_NO_SUCH_FILE; |         Result = STATUS_NO_SUCH_FILE; | ||||||
|  |  | ||||||
|     return Result; |     return Result; | ||||||
| @@ -317,8 +319,12 @@ static NTSTATUS FspFsvolQueryDirectoryCopyInPlace( | |||||||
|         DestBuf, PDestLen); |         DestBuf, PDestLen); | ||||||
|  |  | ||||||
|     if (NT_SUCCESS(Result)) |     if (NT_SUCCESS(Result)) | ||||||
|  |     { | ||||||
|  |         if (0 != *PDestLen) | ||||||
|  |             FileDesc->DirectoryHasSuchFile = TRUE; | ||||||
|         FileDesc->DirectoryOffset = DirectoryOffset; |         FileDesc->DirectoryOffset = DirectoryOffset; | ||||||
|     else if (STATUS_NO_MORE_FILES == Result && 0 == FileDesc->DirectoryOffset) |     } | ||||||
|  |     else if (STATUS_NO_MORE_FILES == Result && !FileDesc->DirectoryHasSuchFile) | ||||||
|         Result = STATUS_NO_SUCH_FILE; |         Result = STATUS_NO_SUCH_FILE; | ||||||
|  |  | ||||||
|     return Result; |     return Result; | ||||||
| @@ -368,9 +374,15 @@ static NTSTATUS FspFsvolQueryDirectoryRetry( | |||||||
|  |  | ||||||
|     /* determine where to (re)start */ |     /* determine where to (re)start */ | ||||||
|     if (IndexSpecified) |     if (IndexSpecified) | ||||||
|  |     { | ||||||
|  |         FileDesc->DirectoryHasSuchFile = FALSE; | ||||||
|         FileDesc->DirectoryOffset = OFFSET_FROM_FILE_INDEX(FileIndex); |         FileDesc->DirectoryOffset = OFFSET_FROM_FILE_INDEX(FileIndex); | ||||||
|  |     } | ||||||
|     else if (RestartScan) |     else if (RestartScan) | ||||||
|  |     { | ||||||
|  |         FileDesc->DirectoryHasSuchFile = FALSE; | ||||||
|         FileDesc->DirectoryOffset = 0; |         FileDesc->DirectoryOffset = 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /* see if the required information is still in the cache and valid! */ |     /* see if the required information is still in the cache and valid! */ | ||||||
|     if (FspFileNodeReferenceDirInfo(FileNode, &DirInfoBuffer, &DirInfoSize)) |     if (FspFileNodeReferenceDirInfo(FileNode, &DirInfoBuffer, &DirInfoSize)) | ||||||
| @@ -588,7 +600,7 @@ NTSTATUS FspFsvolDirectoryControlComplete( | |||||||
|  |  | ||||||
|     if (0 == Response->IoStatus.Information) |     if (0 == Response->IoStatus.Information) | ||||||
|     { |     { | ||||||
|         Result = 0 == FileDesc->DirectoryOffset ? |         Result = !FileDesc->DirectoryHasSuchFile ? | ||||||
|             STATUS_NO_SUCH_FILE : STATUS_NO_MORE_FILES; |             STATUS_NO_SUCH_FILE : STATUS_NO_MORE_FILES; | ||||||
|         FSP_RETURN(); |         FSP_RETURN(); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -835,6 +835,7 @@ typedef struct | |||||||
|     UINT64 UserContext2; |     UINT64 UserContext2; | ||||||
|     BOOLEAN CaseSensitive; |     BOOLEAN CaseSensitive; | ||||||
|     BOOLEAN DeleteOnClose; |     BOOLEAN DeleteOnClose; | ||||||
|  |     BOOLEAN DirectoryHasSuchFile; | ||||||
|     UNICODE_STRING DirectoryPattern; |     UNICODE_STRING DirectoryPattern; | ||||||
|     UINT64 DirectoryOffset; |     UINT64 DirectoryOffset; | ||||||
|     UINT64 DirInfo; |     UINT64 DirInfo; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user