WinFsp Building

This document provides instructions on building WinFsp and describes the WinFsp project structure.

Building

In order to build WinFsp you will need the following:

  • Visual Studio 2019

  • Windows Driver Kit (WDK)

  • Wix toolset

Use the command tools\build.bat Release to produce a full build (including the installer). However the resulting product will not be properly signed and Windows will refuse to load the WinFsp driver, unless you enable testsigning with bcdedit -set testsigning on.

Producing a fully functional build requires an EV certificate and a Partner Center for Windows Hardware account. Assuming you have those, the steps to produce a full build are as follows:

  • Produce a build signed with your EV certificate using tools\build.bat Release.

  • Upload the signed driver.cab file to Microsoft for "attestation signing".

  • Download the now Microsoft-signed driver.cab file and extract it into a folder (e.g. signed-drivers).

  • Re-run the build using tools\build.bat Release PATH\TO\signed-drivers

Versioning

WinFsp versioning (and branding) is controlled by the file build\VStudio\build.version.props. See the WinFsp Rebranding document for details.

Project Structure

The WinFsp project is structured as follows:

  • 📁 art: Project logo and other art.

  • 📁 build: Project build files.

    • 📁 choco: Chocolatey package files.

    • 📁 VStudio: Visual Studio solution and project files.

  • 📁 doc: Project documentation.

  • 📁 ext: External dependencies.

    • 📁 tlib: Test library for C originally from the secfs project.

    • 📁 test: Submodule containing additional file system testing tools.

  • 📁 inc: Public headers.

    • 📁 fuse: Public headers for the FUSE compatibility layer.

    • 📁 fuse3: Public headers for the FUSE3 compatibility layer.

    • 📁 winfsp: Public headers for the WinFsp API.

  • 📁 opt: Additional source code and files.

    • 📁 cygfuse: Source code for the FUSE for Cygwin package.

    • 📁 fsext: Source code for the fsext package.

  • 📁 src: Project source code.

    • 📁 dll: Source code for the WinFsp DLL.

      • 📁 fuse: Source code for the FUSE compatibility layer.

      • 📁 fuse3: Source code for the FUSE3 compatibility layer.

    • 📁 dotnet: Source code for the .NET layer.

    • 📁 fsptool: Source code for the fsptool command line utility.

    • 📁 launcher: Source code for the launcher and the launchctl utility.

    • 📁 shared: Shared source code.

      • 📁 ku: Shared source code for kernel and user mode.

      • 📁 um: Shared source code for user mode only.

    • 📁 sys: Source code for the WinFsp FSD.

  • 📁 tools: Tools for building and testing WinFsp.

  • 📁 tst: Source code for example file systems and test suites.

    • 📁 memfs: The MEMFS reference file system.

    • 📁 winfsp-tests: The primary WinFsp test suite.