diff --git a/build/VStudio/testing/winfsp-tests.vcxproj b/build/VStudio/testing/winfsp-tests.vcxproj
index 7ffd6992..18af2b63 100644
--- a/build/VStudio/testing/winfsp-tests.vcxproj
+++ b/build/VStudio/testing/winfsp-tests.vcxproj
@@ -102,7 +102,7 @@
__func__=__FUNCTION__;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
..\..\..\src;..\..\..\inc;..\..\..\ext
- MultiThreadedDLL
+ MultiThreadedDebugDLL
Console
@@ -118,7 +118,7 @@
__func__=__FUNCTION__;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
..\..\..\src;..\..\..\inc;..\..\..\ext
- MultiThreadedDLL
+ MultiThreadedDebugDLL
Console
@@ -176,7 +176,7 @@
TurnOffAllWarnings
TurnOffAllWarnings
-
+
diff --git a/build/VStudio/testing/winfsp-tests.vcxproj.filters b/build/VStudio/testing/winfsp-tests.vcxproj.filters
index 8caa66e6..4bd992f1 100644
--- a/build/VStudio/testing/winfsp-tests.vcxproj.filters
+++ b/build/VStudio/testing/winfsp-tests.vcxproj.filters
@@ -25,7 +25,7 @@
Source
-
+
Source
diff --git a/tst/winfsp-tests/memfs.c b/tst/winfsp-tests/memfs.c
deleted file mode 100644
index cec536a1..00000000
--- a/tst/winfsp-tests/memfs.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * @file memfs.c
- *
- * @copyright 2015 Bill Zissimopoulos
- */
-
-#include "memfs.h"
-
-static NTSTATUS GetSecurity(FSP_FILE_SYSTEM *FileSystem,
- PWSTR FileName, PDWORD PFileAttributes,
- PSECURITY_DESCRIPTOR SecurityDescriptor, SIZE_T *PSecurityDescriptorSize)
-{
- return STATUS_NOT_IMPLEMENTED;
-}
-
-static NTSTATUS Create(FSP_FILE_SYSTEM *FileSystem,
- FSP_FSCTL_TRANSACT_REQ *Request,
- FSP_FILE_NODE_INFO *Info)
-{
- return STATUS_NOT_IMPLEMENTED;
-}
-
-static NTSTATUS Open(FSP_FILE_SYSTEM *FileSystem,
- FSP_FSCTL_TRANSACT_REQ *Request,
- FSP_FILE_NODE_INFO *Info)
-{
- return STATUS_NOT_IMPLEMENTED;
-}
-
-static NTSTATUS Overwrite(FSP_FILE_SYSTEM *FileSystem,
- FSP_FSCTL_TRANSACT_REQ *Request,
- PVOID FileNode, DWORD FileAttributes, BOOLEAN ReplaceFileAttributes,
- FSP_FILE_SIZE_INFO *Info)
-{
- return STATUS_NOT_IMPLEMENTED;
-}
-
-static VOID Cleanup(FSP_FILE_SYSTEM *FileSystem,
- FSP_FSCTL_TRANSACT_REQ *Request,
- PVOID FileNode, BOOLEAN Delete)
-{
-}
-
-static VOID Close(FSP_FILE_SYSTEM *FileSystem,
- FSP_FSCTL_TRANSACT_REQ *Request,
- PVOID FileNode)
-{
-}
-
-static FSP_FILE_SYSTEM_INTERFACE MemfsInterface =
-{
- .GetSecurity = GetSecurity,
- .Create = Create,
- .Open = Open,
- .Overwrite = Overwrite,
- .Cleanup = Cleanup,
- .Close = Close,
-};
-
-NTSTATUS MemfsCreate(PWSTR DevicePath, ULONG MaxFileNodes, ULONG MaxFileSize,
- MEMFS **PMemfs)
-{
- NTSTATUS Result;
- FSP_FSCTL_VOLUME_PARAMS VolumeParams;
- MEMFS *Memfs;
-
- *PMemfs = 0;
-
- Memfs = malloc(sizeof *Memfs);
- if (0 == Memfs)
- return STATUS_INSUFFICIENT_RESOURCES;
-
- memset(Memfs, 0, sizeof *Memfs);
- Memfs->MaxFileNodes = MaxFileNodes;
- Memfs->MaxFileSize = MaxFileSize;
-
- memset(&VolumeParams, 0, sizeof VolumeParams);
- VolumeParams.FileNameRequired = TRUE;
- wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), L"\\memfs\\share");
-
- Result = FspFileSystemCreate(DevicePath, &VolumeParams, &MemfsInterface, &Memfs->FileSystem);
- if (!NT_SUCCESS(Result))
- {
- free(Memfs);
- return Result;
- }
-
- *PMemfs = Memfs;
-
- return STATUS_SUCCESS;
-}
-
-VOID MemfsDelete(MEMFS *Memfs)
-{
- FspFileSystemDelete(Memfs->FileSystem);
- free(Memfs);
-}
diff --git a/tst/winfsp-tests/memfs.cpp b/tst/winfsp-tests/memfs.cpp
new file mode 100644
index 00000000..c85ebe34
--- /dev/null
+++ b/tst/winfsp-tests/memfs.cpp
@@ -0,0 +1,397 @@
+/**
+ * @file memfs.c
+ *
+ * @copyright 2015 Bill Zissimopoulos
+ */
+
+#include "memfs.h"
+#include