Deficuet.ROVFS 0.0.1-alpha.15

This is a prerelease version of Deficuet.ROVFS.
dotnet add package Deficuet.ROVFS --version 0.0.1-alpha.15
                    
NuGet\Install-Package Deficuet.ROVFS -Version 0.0.1-alpha.15
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Deficuet.ROVFS" Version="0.0.1-alpha.15" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Deficuet.ROVFS" Version="0.0.1-alpha.15" />
                    
Directory.Packages.props
<PackageReference Include="Deficuet.ROVFS" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Deficuet.ROVFS --version 0.0.1-alpha.15
                    
#r "nuget: Deficuet.ROVFS, 0.0.1-alpha.15"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Deficuet.ROVFS@0.0.1-alpha.15
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Deficuet.ROVFS&version=0.0.1-alpha.15&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Deficuet.ROVFS&version=0.0.1-alpha.15&prerelease
                    
Install as a Cake Tool

ROVFS — Read Only Virtual File System

A read-only virtual file system framework for Windows, built on WinFsp via winfsp.net. Targets netstandard2.0, so Unity 2022+ projects can consume it directly.

ReadOnlyFileSystem implements the read half of a WinFsp file system and delegates all data access to a user-supplied data manager. All write operations (Create, Write, Rename, SetDelete) are rejected, and Open denies every write-related NT access bit.

Core types

Type Role
ReadOnlyFileSystem<...> The WinFsp FileSystemBase implementation; forwards lookups, reads, enumeration, and security queries to the data manager.
FileSystemNode Marker base class for file entries and directory views.
DirectoryViewBase<TFileEntry, TDirectoryView, TEntryKey> A directory that only knows its children's names and node types; sizes and timestamps are resolved per entry by the data manager.
EntryInfo<TEntryKey> One enumerated directory entry: the entry key plus whether it is a directory.
SegmentedFileEntryBase Base for file entries with BackingFileOffset (base offset in the backing physical file) and FileSize.
IFileSystemDataManager<TFileEntry, TDirectoryView, TFileContext, TDirectoryContext, TEntryKey> The contract implementers fill in: path resolution, file contexts, FileInfo assembly, security, volume info, logging.
SegmentedFileSystemDataManagerBase A ready-made data manager base whose file contexts are SafeFileHandles; reads go through Win32RandomAccess.
Win32RandomAccess P/Invoke helpers: CreateFileW with FILE_FLAG_OVERLAPPED for concurrent random access, and offset-based ReadFile via an OVERLAPPED.
Win32PatternMatcher Win32 wildcard matching (MatchesWin32Expression / TranslateWin32Expression), ported from System.IO.Enumeration.FileSystemName, which is unavailable on netstandard2.0.

Contracts expected from implementations

  • Flat path lookup. Path resolution is by full path; the intended implementation is two flat dictionaries (files and directories) keyed by the paths WinFsp passes in. These paths are always rooted at \ and use \ separators, regardless of whether the volume is mounted on a drive letter or into an existing empty folder — the mount point prefix never reaches user mode.
  • Directory contexts. CreateDirectoryContext runs when a directory is opened and produces an opaque TDirectoryContext; it is handed back for child path joining (GetChildFullPath) during enumeration and passed as-is to CloseContext. A plain string (the directory path) is a sensible choice; GetChildFullPath must not produce doubled backslashes for the root directory, whose path is \.
  • Enumeration. GetEntryInfoEnumerable yields EntryInfo<TEntryKey> in a stable, sorted order, since WinFsp resumes directory enumeration by the last returned name (marker). When PassQueryDirectoryPattern is enabled the data manager must also apply the wildcard pattern. A name→index map makes marker lookup O(1); a natural-sort binary search handles markers that are not present verbatim.
  • Thread safety. WinFsp calls into the data manager from multiple worker threads concurrently (opens, reads, enumerations, metadata queries). Implementations must be safe for concurrent reads; the intended pattern is populate-once-then-mount, after which the lookup structures are never modified.
  • File handles. TryGetFileContext runs per Open; back the handles with FILE_FLAG_OVERLAPPED (see Win32RandomAccess.OpenFileReadOnly) so the same handle can serve concurrent offset-based reads.

WinFsp host settings applied in Init

SectorSize/SectorsPerAllocationUnit = 4096/1, MaxComponentLength = 255, FileInfoTimeout = 60000, CaseSensitiveSearch = false, CasePreservedNames/UnicodeOnDisk/PersistentAcls = true, PassQueryDirectoryPattern = true, FlushAndPurgeOnCleanup = false (no flush or cache purge makes sense on a read-only volume). Volume label, creation time, and total size come from the data manager; free size is always 0.

NuGet Dependencies

  • winfsp.net 2.1.25156
    • The installed WinFsp must also be 2.1, otherwise the native dll versions do not match.
  • System.Memory 4.6.3
    • Provides the span types on netstandard2.0; consumers (e.g. Unity) must ship this dll as well.
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Deficuet.ROVFS:

Package Downloads
Deficuet.APFS

Read-only file system mapping asset files based on WinFsp

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.0.1-alpha.15 96 9/8/2026
0.0.1-alpha.14 68 9/8/2026
0.0.1-alpha.13 65 9/8/2026
0.0.1-alpha.12 82 9/7/2026
0.0.1-alpha.11 73 9/6/2026
0.0.1-alpha.10 73 9/5/2026
0.0.1-alpha.9 70 9/5/2026
0.0.1-alpha.8 62 9/4/2026
0.0.1-alpha.7 65 8/31/2026
0.0.1-alpha.6 77 8/31/2026
0.0.1-alpha.5 68 8/31/2026
0.0.1-alpha.4 77 8/31/2026
0.0.1-alpha.3 68 8/31/2026
0.0.1-alpha.2 69 8/30/2026
0.0.1-alpha.1 107 8/29/2026