diff --git a/build/VStudio/testing/winfsp-tests.vcxproj b/build/VStudio/testing/winfsp-tests.vcxproj index c1cb3345..7ffd6992 100644 --- a/build/VStudio/testing/winfsp-tests.vcxproj +++ b/build/VStudio/testing/winfsp-tests.vcxproj @@ -176,6 +176,7 @@ TurnOffAllWarnings TurnOffAllWarnings + @@ -183,6 +184,7 @@ + diff --git a/build/VStudio/testing/winfsp-tests.vcxproj.filters b/build/VStudio/testing/winfsp-tests.vcxproj.filters index 47ab4f4b..8caa66e6 100644 --- a/build/VStudio/testing/winfsp-tests.vcxproj.filters +++ b/build/VStudio/testing/winfsp-tests.vcxproj.filters @@ -25,10 +25,16 @@ Source + + Source + Source\tlib + + Source + \ No newline at end of file diff --git a/inc/winfsp/winfsp.h b/inc/winfsp/winfsp.h index 3530db0a..c0bed788 100644 --- a/inc/winfsp/winfsp.h +++ b/inc/winfsp/winfsp.h @@ -178,4 +178,5 @@ FSP_API VOID FspPathCombine(PWSTR Prefix, PWSTR Suffix); */ FSP_API NTSTATUS FspNtStatusFromWin32(DWORD Error); FSP_API VOID FspDebugLog(const char *format, ...); + #endif diff --git a/tst/winfsp-tests/memfs.c b/tst/winfsp-tests/memfs.c new file mode 100644 index 00000000..cec536a1 --- /dev/null +++ b/tst/winfsp-tests/memfs.c @@ -0,0 +1,97 @@ +/** + * @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.h b/tst/winfsp-tests/memfs.h new file mode 100644 index 00000000..0fd677f7 --- /dev/null +++ b/tst/winfsp-tests/memfs.h @@ -0,0 +1,23 @@ +/** + * @file memfs.h + * + * @copyright 2015 Bill Zissimopoulos + */ + +#ifndef MEMFS_H_INCLUDED +#define MEMFS_H_INCLUDED + +#include + +typedef struct _MEMFS +{ + FSP_FILE_SYSTEM *FileSystem; + ULONG MaxFileNodes; + ULONG MaxFileSize; +} MEMFS; + +NTSTATUS MemfsCreate(PWSTR DevicePath, ULONG MaxFileNodes, ULONG MaxFileSize, + MEMFS **PMemfs); +VOID MemfsDelete(MEMFS *Memfs); + +#endif