diff --git a/build/VStudio/testing/winfsp-tests.vcxproj b/build/VStudio/testing/winfsp-tests.vcxproj
index 085005b0..62f4b3f2 100644
--- a/build/VStudio/testing/winfsp-tests.vcxproj
+++ b/build/VStudio/testing/winfsp-tests.vcxproj
@@ -186,6 +186,7 @@
+
diff --git a/build/VStudio/testing/winfsp-tests.vcxproj.filters b/build/VStudio/testing/winfsp-tests.vcxproj.filters
index 27724262..5b5857fe 100644
--- a/build/VStudio/testing/winfsp-tests.vcxproj.filters
+++ b/build/VStudio/testing/winfsp-tests.vcxproj.filters
@@ -40,6 +40,9 @@
Source
+
+ Source
+
diff --git a/tst/winfsp-tests/memfs.cpp b/tst/winfsp-tests/memfs.cpp
index 72f9ea0e..18c3b68c 100644
--- a/tst/winfsp-tests/memfs.cpp
+++ b/tst/winfsp-tests/memfs.cpp
@@ -193,6 +193,11 @@ BOOLEAN MemfsFileNodeMapHasChild(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NO
return Result;
}
+static NTSTATUS SetFileSize(FSP_FILE_SYSTEM *FileSystem,
+ FSP_FSCTL_TRANSACT_REQ *Request,
+ PVOID FileNode0, UINT64 FileSize,
+ FSP_FSCTL_FILE_INFO *FileInfo);
+
static NTSTATUS GetVolumeInfo(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request,
FSP_FSCTL_VOLUME_INFO *VolumeInfo)
@@ -481,7 +486,7 @@ static NTSTATUS GetFileInfo(FSP_FILE_SYSTEM *FileSystem,
return STATUS_SUCCESS;
}
-NTSTATUS SetBasicInfo(FSP_FILE_SYSTEM *FileSystem,
+static NTSTATUS SetBasicInfo(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request,
PVOID FileNode0, UINT32 FileAttributes,
UINT64 CreationTime, UINT64 LastAccessTime, UINT64 LastWriteTime,
@@ -503,7 +508,7 @@ NTSTATUS SetBasicInfo(FSP_FILE_SYSTEM *FileSystem,
return STATUS_SUCCESS;
}
-NTSTATUS SetAllocationSize(FSP_FILE_SYSTEM *FileSystem,
+static NTSTATUS SetAllocationSize(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request,
PVOID FileNode0, UINT64 AllocationSize,
FSP_FSCTL_FILE_INFO *FileInfo)
@@ -533,7 +538,7 @@ NTSTATUS SetAllocationSize(FSP_FILE_SYSTEM *FileSystem,
return STATUS_SUCCESS;
}
-NTSTATUS SetFileSize(FSP_FILE_SYSTEM *FileSystem,
+static NTSTATUS SetFileSize(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request,
PVOID FileNode0, UINT64 FileSize,
FSP_FSCTL_FILE_INFO *FileInfo)
@@ -563,7 +568,7 @@ NTSTATUS SetFileSize(FSP_FILE_SYSTEM *FileSystem,
return STATUS_SUCCESS;
}
-NTSTATUS CanDelete(FSP_FILE_SYSTEM *FileSystem,
+static NTSTATUS CanDelete(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request,
PVOID FileNode0, PWSTR FileName)
{
@@ -578,7 +583,7 @@ NTSTATUS CanDelete(FSP_FILE_SYSTEM *FileSystem,
return STATUS_SUCCESS;
}
-NTSTATUS Rename(FSP_FILE_SYSTEM *FileSystem,
+static NTSTATUS Rename(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request,
PVOID FileNode0,
PWSTR FileName, PWSTR NewFileName, BOOLEAN ReplaceIfExists)
diff --git a/tst/winfsp-tests/rdwr-test.c b/tst/winfsp-tests/rdwr-test.c
new file mode 100644
index 00000000..9d759029
--- /dev/null
+++ b/tst/winfsp-tests/rdwr-test.c
@@ -0,0 +1,44 @@
+#include
+#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);
+
+extern int NtfsTests;
+extern int WinFspDiskTests;
+extern int WinFspNetTests;
+
+void rdwr_noncached_dotest(ULONG Flags, PWSTR Prefix, ULONG FileInfoTimeout)
+{
+ void *memfs = memfs_start_ex(Flags, FileInfoTimeout);
+
+ memfs_stop(memfs);
+}
+
+void rdwr_noncached_test(void)
+{
+ if (NtfsTests)
+ {
+ WCHAR DirBuf[MAX_PATH] = L"\\\\?\\";
+ GetCurrentDirectoryW(MAX_PATH - 4, DirBuf + 4);
+ rdwr_noncached_dotest(-1, DirBuf, 0);
+ }
+ if (WinFspDiskTests)
+ {
+ rdwr_noncached_dotest(MemfsDisk, 0, 0);
+ rdwr_noncached_dotest(MemfsDisk, 0, 1000);
+ }
+ if (WinFspNetTests)
+ {
+ rdwr_noncached_dotest(MemfsNet, L"\\\\memfs\\share", 0);
+ rdwr_noncached_dotest(MemfsNet, L"\\\\memfs\\share", 1000);
+ }
+}
+
+void rdwr_tests(void)
+{
+ TEST(rdwr_noncached_test);
+}
diff --git a/tst/winfsp-tests/winfsp-tests.c b/tst/winfsp-tests/winfsp-tests.c
index ea80d096..269585e1 100644
--- a/tst/winfsp-tests/winfsp-tests.c
+++ b/tst/winfsp-tests/winfsp-tests.c
@@ -13,6 +13,7 @@ int main(int argc, char *argv[])
TESTSUITE(create_tests);
TESTSUITE(info_tests);
TESTSUITE(security_tests);
+ TESTSUITE(rdwr_tests);
tlib_run_tests(argc, argv);
return 0;