diff --git a/src/sys/file.c b/src/sys/file.c index 042b949e..83b5d2af 100644 --- a/src/sys/file.c +++ b/src/sys/file.c @@ -343,7 +343,7 @@ static BOOLEAN FspFileNodeTryGetFileInfoNp(FSP_FILE_NODE_NONPAGED *FileNodeNp, BOOLEAN Result; KeAcquireSpinLock(&FileNodeNp->InfoSpinLock, &Irql); - if (0 < FileNodeNp->InfoExpirationTime && FileNodeNp->InfoExpirationTime < KeQueryInterruptTime()) + if (0 < FileNodeNp->InfoExpirationTime && KeQueryInterruptTime() < FileNodeNp->InfoExpirationTime) { FileInfoNp->FileAttributes = FileNodeNp->FileAttributes; FileInfoNp->ReparseTag = FileNodeNp->ReparseTag; diff --git a/tst/winfsp-tests/fileinfo-test.c b/tst/winfsp-tests/fileinfo-test.c index 1621518b..a8a6d396 100644 --- a/tst/winfsp-tests/fileinfo-test.c +++ b/tst/winfsp-tests/fileinfo-test.c @@ -4,6 +4,7 @@ #include #include "memfs.h" +void *memfs_start_ex(ULONG Flags, ULONG FileInfoTimeout); void *memfs_start(ULONG Flags); void memfs_stop(void *data); PWSTR memfs_volumename(void *data); @@ -12,9 +13,9 @@ extern int NtfsTests; extern int WinFspDiskTests; extern int WinFspNetTests; -void getinfo_dotest(ULONG Flags, PWSTR Prefix) +void getinfo_dotest(ULONG Flags, PWSTR Prefix, ULONG FileInfoTimeout) { - void *memfs = memfs_start(Flags); + void *memfs = memfs_start_ex(Flags, FileInfoTimeout); HANDLE Handle; BOOL Success; @@ -125,12 +126,18 @@ void getinfo_test(void) { WCHAR DirBuf[MAX_PATH] = L"\\\\?\\"; GetCurrentDirectoryW(MAX_PATH - 4, DirBuf + 4); - getinfo_dotest(-1, DirBuf); + getinfo_dotest(-1, DirBuf, 0); } if (WinFspDiskTests) - getinfo_dotest(MemfsDisk, 0); + { + getinfo_dotest(MemfsDisk, 0, 0); + getinfo_dotest(MemfsDisk, 0, 1000); + } if (WinFspNetTests) - getinfo_dotest(MemfsNet, L"\\\\memfs\\share"); + { + getinfo_dotest(MemfsNet, L"\\\\memfs\\share", 0); + getinfo_dotest(MemfsNet, L"\\\\memfs\\share", 1000); + } } void getinfo_tests(void) diff --git a/tst/winfsp-tests/memfs-test.c b/tst/winfsp-tests/memfs-test.c index 451f2ee7..d7956251 100644 --- a/tst/winfsp-tests/memfs-test.c +++ b/tst/winfsp-tests/memfs-test.c @@ -18,7 +18,7 @@ static unsigned __stdcall memfs_thread(void *Memfs0) return FspFileSystemLoop(MemfsFileSystem(Memfs)); } -void *memfs_start(ULONG Flags) +void *memfs_start_ex(ULONG Flags, ULONG FileInfoTimeout) { if (-1 == Flags) return 0; @@ -31,7 +31,7 @@ void *memfs_start(ULONG Flags) data = malloc(sizeof *data); ASSERT(0 != data); - Result = MemfsCreate(Flags, 1000, 65500, &Memfs); + Result = MemfsCreate(Flags, FileInfoTimeout, 1000, 65500, &Memfs); ASSERT(NT_SUCCESS(Result)); ASSERT(0 != Memfs); @@ -44,6 +44,11 @@ void *memfs_start(ULONG Flags) return data; } +void *memfs_start(ULONG Flags) +{ + return memfs_start_ex(Flags, 0); +} + void memfs_stop(void *data) { if (0 == data) diff --git a/tst/winfsp-tests/memfs.cpp b/tst/winfsp-tests/memfs.cpp index 143b1595..9e10f4fe 100644 --- a/tst/winfsp-tests/memfs.cpp +++ b/tst/winfsp-tests/memfs.cpp @@ -399,7 +399,8 @@ static VOID MemfsLeaveOperation(FSP_FILE_SYSTEM *FileSystem, FSP_FSCTL_TRANSACT_ LeaveCriticalSection(&Memfs->Lock); } -NTSTATUS MemfsCreate(ULONG Flags, ULONG MaxFileNodes, ULONG MaxFileSize, +NTSTATUS MemfsCreate(ULONG Flags, ULONG FileInfoTimeout, + ULONG MaxFileNodes, ULONG MaxFileSize, MEMFS **PMemfs) { NTSTATUS Result; @@ -429,6 +430,7 @@ NTSTATUS MemfsCreate(ULONG Flags, ULONG MaxFileNodes, ULONG MaxFileSize, memset(&VolumeParams, 0, sizeof VolumeParams); VolumeParams.SectorSize = MEMFS_SECTOR_SIZE; + VolumeParams.FileInfoTimeout = FileInfoTimeout; wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), L"\\memfs\\share"); Result = FspFileSystemCreate(DevicePath, &VolumeParams, &MemfsInterface, &Memfs->FileSystem); diff --git a/tst/winfsp-tests/memfs.h b/tst/winfsp-tests/memfs.h index 08d3c451..b1cbf1c9 100644 --- a/tst/winfsp-tests/memfs.h +++ b/tst/winfsp-tests/memfs.h @@ -23,7 +23,8 @@ enum MemfsThreadPool = 0x02, }; -NTSTATUS MemfsCreate(ULONG Flags, ULONG MaxFileNodes, ULONG MaxFileSize, +NTSTATUS MemfsCreate(ULONG Flags, ULONG FileInfoTimeout, + ULONG MaxFileNodes, ULONG MaxFileSize, MEMFS **PMemfs); VOID MemfsDelete(MEMFS *Memfs); FSP_FILE_SYSTEM *MemfsFileSystem(MEMFS *Memfs);