winspd

Windows Storage Proxy Driver - User mode disk storage

Github星跟踪图

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:

  • :file_folder: build/VStudio: WinSpd solution and project files.
  • :file_folder: ext: External dependencies.
    • :file_folder: ext/tlib: A small test library originally from the secfs (Secure Cloud File System) project.
  • :file_folder: inc: Public headers.
    • :file_folder: inc/winspd: Public headers for the WinSpd API.
  • :file_folder: src: WinSpd source code.
    • :file_folder: src/devsetup: Source code to the devsetup utility. It is used
      to add or remove the WinSpd device driver from the system.
    • :file_folder: src/dll: Source code to the WinSpd DLL. It is used by user mode
      storage devices to communicate with the WinSpd device driver.
    • :file_folder: src/dotnet: Source code to the .NET layer.
    • :file_folder: 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.
    • :file_folder: src/scsitool: Source code to the scsitool command line utility.
    • :file_folder: 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.
    • :file_folder: src/stgtest: Source code to the stgtest storage testing tool.
    • :file_folder: src/sys: Source code to the WinSpd kernel driver.
  • :file_folder: tst: Source code to example user mode storage devices and test tools.
  • :file_folder: 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.

主要指标

概览
名称与所有者winfsp/winspd
主编程语言C
编程语言C (语言数: 6)
平台
许可证Other
所有者活动
创建于2018-10-15 02:39:17
推送于2021-06-08 01:21:47
最后一次提交2020-12-22 13:01:38
发布数2
最新版本名称v1.0B1 (发布于 2020-12-22 13:52:39)
第一版名称v0.9 (发布于 2019-03-10 20:17:44)
用户参与
星数429
关注者数31
派生数56
提交数440
已启用问题?
问题数14
打开的问题数5
拉请求数1
打开的拉请求数1
关闭的拉请求数0
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?