All Projects → billziss-gh → Winspd

billziss-gh / Winspd

Licence: other
Windows Storage Proxy Driver - User mode disk storage

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Winspd

Deos
The distributed exokernel operating system
Stars: ✭ 80 (-76.12%)
Mutual labels:  gplv3, driver, kernel
Winfsp
Windows File System Proxy - FUSE for Windows
Stars: ✭ 4,071 (+1115.22%)
Mutual labels:  gplv3, driver, kernel
Driver.NET
Lightweight and flexible library to load and communicate with kernel drivers on Windows.
Stars: ✭ 59 (-82.39%)
Mutual labels:  kernel, driver
pearlfan
GNU/Linux kernel driver and libusb app for a Pearl's USB LED fan
Stars: ✭ 20 (-94.03%)
Mutual labels:  kernel, driver
lethe
Secure drive wipe
Stars: ✭ 47 (-85.97%)
Mutual labels:  disk, storage
fix-linux-mouse
Hints how to fix USB mouse issues on Linux
Stars: ✭ 36 (-89.25%)
Mutual labels:  kernel, driver
w1-gpio-cl
Command line configured kernel mode 1-wire bus master driver. w1-gpio standard Linux module enhancement/substitution.
Stars: ✭ 17 (-94.93%)
Mutual labels:  kernel, driver
Cat-Driver
CatDriver - The Kernel Mode Driver that written in C++. It is an useful driver and has the highest privilege level on the Windows platform. It can be used for Game Hacking and others.
Stars: ✭ 41 (-87.76%)
Mutual labels:  kernel, driver
Binaryprefs
Rapidly fast and lightweight re-implementation of SharedPreferences which stores each preference in files separately, performs disk operations via NIO with memory mapped byte buffers and works IPC (between processes). Written from scratch.
Stars: ✭ 484 (+44.48%)
Mutual labels:  storage, disk
Razer Laptop Control
Project to create driver/software to control performance of razer laptops
Stars: ✭ 268 (-20%)
Mutual labels:  driver, kernel
Storage
An iOS library for fast, easy, and safe threaded disk I/O.
Stars: ✭ 259 (-22.69%)
Mutual labels:  storage, disk
Flydrive
☁️ Flexible and Fluent framework-agnostic driver based system to manage storage in Node.js
Stars: ✭ 275 (-17.91%)
Mutual labels:  storage, driver
PSDiskPart
DiskPart PowerShell Module
Stars: ✭ 30 (-91.04%)
Mutual labels:  disk, storage
BlobHelper
BlobHelper is a common, consistent storage interface for Microsoft Azure, Amazon S3, Komodo, Kvpbase, and local filesystem written in C#.
Stars: ✭ 23 (-93.13%)
Mutual labels:  disk, storage
KMAC
Some usefull info when reverse engineering Kernel Mode Anti-Cheat
Stars: ✭ 31 (-90.75%)
Mutual labels:  kernel, driver
Node Disk Manager
Kubernetes Storage Device Management
Stars: ✭ 128 (-61.79%)
Mutual labels:  storage, disk
pps-gen-gpio
Linux kernel PPS generator using GPIO pins
Stars: ✭ 25 (-92.54%)
Mutual labels:  kernel, driver
Openstorage
A multi-host clustered implementation of the open storage specification
Stars: ✭ 407 (+21.49%)
Mutual labels:  storage, driver
KDBG
The windows kernel debugger consists of two parts, KMOD which is the kernel driver handling ring3 request and KCLI; the command line interface for the driver. It originated due to insufficient useability with CheatEngine's DBVM driver while debugging games running under certain AntiCheat software.
Stars: ✭ 28 (-91.64%)
Mutual labels:  kernel, driver
Vagrant Persistent Storage
A Vagrant plugin that creates a persistent storage and attaches it to guest machine.
Stars: ✭ 285 (-14.93%)
Mutual labels:  storage, disk

WinSpd · Windows Storage Proxy Driver

Download




WinSpd enables the creation of storage units ("SCSI disks") in user mode (i.e. without writing any kernel mode code). Such storage units are created and served by user mode storage devices (i.e. user mode processes) and are added to the Windows OS storage stack. They appear to Windows as real disks that can be formatted and accessed via a file system such as NTFS.

User Mode Storage Devices

A user mode storage device is a user mode process that can create and serve storage units. As storage unit is a SCSI "direct-access block device" (as per the definition in the SCSI SBC standard) or more commonly referred to as a "SCSI disk". It is used to store data in logical blocks; each block contains the same amount of data (the Block Length) and has a Logical Block Address (LBA), which is a 64-bit number in a single contiguous address space. In particular WinSpd (and the SCSI standard) do not assume the traditional geometry of cylinder-head-sector (CHS) for how blocks are laid out.

Storage units support two primary operations: read and write, and two secondary operations: flush and unmap:

  • Read: read blocks at the specified LBA.
  • Write: write blocks at the specified LBA.
  • Flush: flush any cached block data at the specified LBA.
  • Unmap: unmap (deallocate) blocks at the specified LBA. This is like the well known TRIM command.

For a full tutorial on creating a user mode storage device see the Tutorial.

Design

WinSpd consists of a number of software components with different responsibilities:

  • The core components are a kernel driver (implemented as a StorPort virtual miniport) and a user mode DLL. User mode storage devices use the DLL to communicate with the driver via special IOCTL's.
  • A launcher service that is used to launch and control user mode storage devices.
  • A shell extension that is used to implement the "mount" and "eject" functionalities available via the Windows Explorer and Shell.

Archictecture diagram

The WinSpd virtual miniport implements the following SCSI commands:

  • REPORT LUNS
  • TEST UNIT READY
  • INQUIRY: Standard, Supported Pages VPD, Serial Number VPD, Device Identifiers VPD, Block Limits VPD, Logical Block Provisioning VPD
  • MODE SENSE(6), MODE SENSE(10): All Pages, Mode Caching Page
  • READ CAPACITY(10), READ CAPACITY(16)
  • READ(6), READ(10), READ(12), READ(16)
  • WRITE(6), WRITE(10), WRITE(12), WRITE(16)
  • SYNCHRONIZE CACHE(10), SYNCHRONIZE CACHE(16)
  • UNMAP

Project Organization

The project source code is organized as follows:

  • 📁 build/VStudio: WinSpd solution and project files.
  • 📁 ext: External dependencies.
    • 📁 ext/tlib: A small test library originally from the secfs (Secure Cloud File System) project.
  • 📁 inc: Public headers.
    • 📁 inc/winspd: Public headers for the WinSpd API.
  • 📁 src: WinSpd source code.
    • 📁 src/devsetup: Source code to the devsetup utility. It is used to add or remove the WinSpd device driver from the system.
    • 📁 src/dll: Source code to the WinSpd DLL. It is used by user mode storage devices to communicate with the WinSpd device driver.
    • 📁 src/dotnet: Source code to the .NET layer.
    • 📁 src/launcher: Source code to the launcher service and the launchctl utility. The launcher service is used to launch and control user mode storage devices.
    • 📁 src/scsitool: Source code to the scsitool command line utility.
    • 📁 src/shellex: Source code to the WinSpd shell extension. It is used to implement the "mount" and "eject" functionalities available via the Windows Explorer and the Shell.
    • 📁 src/stgtest: Source code to the stgtest storage testing tool.
    • 📁 src/sys: Source code to the WinSpd kernel driver.
  • 📁 tst: Source code to example user mode storage devices and test tools.
  • 📁 tools: Various tools for building and testing WinSpd.

License

WinSpd is available under the GPLv3 license with a special exception for Free/Libre and Open Source Software. A commercial license is also available. Please contact Bill Zissimopoulos <billziss at navimatics.com> for more details.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].