From f7ce154278ad9bcdb45c548d2b6cec76e6a47e78 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Mon, 25 Jan 2016 14:14:18 -0800 Subject: [PATCH] winfsp-tests: memfs --- tst/winfsp-tests/memfs.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/tst/winfsp-tests/memfs.cpp b/tst/winfsp-tests/memfs.cpp index 832bc479..120b7fb6 100644 --- a/tst/winfsp-tests/memfs.cpp +++ b/tst/winfsp-tests/memfs.cpp @@ -9,6 +9,7 @@ #include #define MEMFS_SECTOR_SIZE 512 +#define MEMFS_SECTORS_PER_ALLOCATION_UNIT 1 static inline UINT64 MemfsGetSystemTime(VOID) @@ -191,7 +192,22 @@ static NTSTATUS GetVolumeInfo(FSP_FILE_SYSTEM *FileSystem, FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_VOLUME_INFO *VolumeInfo) { - return STATUS_INVALID_DEVICE_REQUEST; + MEMFS *Memfs = (MEMFS *)FileSystem->UserContext; + MEMFS_FILE_NODE *RootNode; + ULONG AllocationUnits = Memfs->MaxFileSize / (MEMFS_SECTOR_SIZE * MEMFS_SECTORS_PER_ALLOCATION_UNIT); + + RootNode = MemfsFileNodeMapGet(Memfs->FileNodeMap, L""); + if (0 == RootNode) + return STATUS_DISK_CORRUPT_ERROR; + + VolumeInfo->TotalAllocationUnits = Memfs->MaxFileNodes * AllocationUnits; + VolumeInfo->AvailableAllocationUnits = + (Memfs->MaxFileNodes - MemfsFileNodeMapCount(Memfs->FileNodeMap)) * AllocationUnits; + VolumeInfo->VolumeCreationTime = RootNode->FileInfo.CreationTime; + VolumeInfo->VolumeLabelLength = sizeof L"MEMFS" - sizeof(WCHAR); + memcpy(VolumeInfo->VolumeLabel, L"Memfs", VolumeInfo->VolumeLabelLength); + + return STATUS_SUCCESS; } static NTSTATUS GetSecurity(FSP_FILE_SYSTEM *FileSystem, @@ -438,7 +454,13 @@ NTSTATUS MemfsCreate(ULONG Flags, ULONG FileInfoTimeout, memset(&VolumeParams, 0, sizeof VolumeParams); VolumeParams.SectorSize = MEMFS_SECTOR_SIZE; + VolumeParams.SectorsPerAllocationUnit = MEMFS_SECTORS_PER_ALLOCATION_UNIT; + VolumeParams.SerialNumber = (UINT32)(MemfsGetSystemTime() / (10000 * 1000)); VolumeParams.FileInfoTimeout = FileInfoTimeout; + VolumeParams.CaseSensitiveSearch = 1; + VolumeParams.CasePreservedNames = 1; + VolumeParams.UnicodeOnDisk = 1; + VolumeParams.PersistentAcls = 1; wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), L"\\memfs\\share"); Result = FspFileSystemCreate(DevicePath, &VolumeParams, &MemfsInterface, &Memfs->FileSystem);