mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 08:53:01 -05:00
sys: IRP_MJ_DIRECTORY_CONTROL: DirectoryHasSuchFile
This commit is contained in:
parent
bd96826286
commit
48ee6f067a
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user