FUSE for Windows

FUSE User mode file system on Windows

Filesystem in User SpacE (FUSE) is a software interface for developing file systems in user-mode without complexity of kernel interface programming.  Crossmeta FUSE provides the same reference Linux FUSE API, so that programs can be ported with no or very little modifications.  While it maintains the same API interface it does not inherit the limitations of  transfer size and concurrent writes.  It provides the following two components

  • dynamically loadable fuse kernel module cxfuse.sys
  • cxfuse.dll that is linked with FUSE application provides necessary implementation for interfacing with the FUSE kernel module.

Getting Started

The cxfuse user-space library offers two APIs:

  • high-level, synchronous API
  •  low-level asynchronous API

In both cases, file system requests from the kernel are passed to the main program using callbacks. When using the high-level API, the callbacks may work with file names and paths instead of inodes, and processing of a request finishes when the callback function returns. When using the low-level API, the callbacks must work with inodes and responses must be sent explicitly using a separate set of API functions.

It comes with following classic “Hello, World” samples and real-world sshfs program on Windows

  • hello using high-level FUSE API
  • hello_ll using low-level FUSE API
  • sshfs is a popular FUSE file system client that allows secure seamless access to remote files with standard SSH account login, as if they were local files.

Architecture

A flow-chart diagram showing how FUSE works: Request from userspace to list files (ls -l /mnt) gets redirected by the Kernel through NTIFS to FUSE. FUSE then contacts the registered handler program (./hello) and passes file systems requests as LPC messages. The handler program returns a response back to FUSE as LPC reply which is then redirected to the userspace program that originally made the request.

FUSE API

The high-level API that is primarily specified in fuse.h.

The low-level API that is primarily documented in fuse_lowlevel.h. You don’t have to learn any new API in Crossmeta FUSE as a true port of Linux FUSE 2.6

The Crossmeta wiki includes additional information on Crossmeta FUSE

Checkout our github project repository in cxfuse and start building your next great user mode file system.

DEPLOY & TEST

Obtain the latest Crossmeta FUSE  system installer package that includes EV code signed FUSE driver modules for all Windows releases. The installer also contains the runtime Crossmeta system with additional FUSE programs sshfs and fuse-nfs.

  1. Extract All of  the Crossmeta FUSE zip archive which also contains the setup.exe program
  2. Try to Run as Administrator while launching setup.exe
  3. The Crossmeta setup program will navigate you through the installation setups with easy to follow dialog.  Usually you have to click Next
  4. Once the Crossmeta setup program finishes successfully the Crossmeta files will be available in the V: drive.
  5. There is no need to reboot the system.
  6. On subsequent Windows  startup you have to manually start the Crossmeta drivers by typing
    c:\program files\crossmeta> service_crossmeta start
  7. In case of unclean shutdown it is required to repair the Crossmeta root filesystem as follows
    c:\program files\crossmeta> service_crossmeta check
  8. To unload Crossmeta drivers
    c:\program files\crossmeta> service_crossmeta stop
  9. To uninstall the Crossmeta program
    c:\program files\crossmeta> setup.exe /u

Demo

Crossmeta FUSE Demo

Crossmeta FUSE running the sample fuse hello program

RSS
YouTube
LinkedIn