Show HN: WinSpd – create “SCSI disks” as user mode processes on Windows
github.com
github.com
I have also known people who use this technique to create an encrypted disk image which is distributed with their program which provides the 'secret bits'. Sort of like mount the image, decrypt it by giving it the key, and then launch the app which loads its .dll files from the newly decrypted attached disk. A bit of obfuscation which minimizes the impact on the application that you're trying to keep out of the hands of people without a license to it.
In my case I wanted a simple way to create "SCSI disks" using a user mode process. Since I had already created WinFsp, which has a solid IPC (Inter-Process Communication) protocol, this felt like the best way forward.
What is this for? What itch were you attempting to scratch which lead you to create this? How could it be useful in a project? / What sorts of projects would it it lend itself to?
The practical one is that I wanted to be able to store disk data in a cloud storage bucket (i.e. "format" a bucket with NTFS and use it as a disk). For various reasons I did not want to build this as a WinFsp or FUSE file system.
The theoretical one is that I am exploring the possibility of writing a new OS where all/most IO/services/etc. could be implemented either in kernel mode or user mode. Not bolt it onto an existing OS like I have done with WinFsp and WinSpd, but build the OS like this from the ground up.
To finish here are some use cases for WinSpd as food for thought:
- Mounting virtual disks in a format other than VHD.
- Mounting a cloud storage bucket as a disk.
- Serving a read-only disk from an internet location for use by multiple users.
- Tracking disk I/O for backup, snapshotting or other purposes.
I tried Dokan and CBFS (Call Back File System) a long time ago. They were both great, but I ran into bugs fairly quickly with each.
[0] https://docs.microsoft.com/en-us/windows/desktop/projfs/proj...
I like to think that WinFsp is very stable software. I am working to bring WinSpd to the same levels of stability.
Here is the most updated version of those documents:
The included sample, called rawdisk, memory maps a file and uses it as a disk image file. This could presumably be done over SMB or NFS, although I have not tested the performance.
Command queues are supported by default as well, as this is a Storport virtual miniport driver (which supports command queues).
They both have their uses but in general I think WinFsp is more useful for most.
I am not familiar with ImDisk.
I think the main difference is that WinSpd is a general tool for creating disks as user mode processes, whereas ImDisk is a tool for mounting image files only.
It looks like WinSpd is a more generic tool. But I know very little about ImDisk so I may be mis-representing it.
They too have a .NET wrapper BTW.