Windows application that mounts a remote VPS (via SFTP) as a native network drive in File Explorer.
Source code & documentation: https://github.com/Mike4947/Ether_Mount
Your VPS credentials are never stored in the source code or committed to Git. They are:
- Encrypted with Windows DPAPI (CryptProtectData)
- Stored in
%APPDATA%\EtherMount\credentials.dat(outside the repo) - Safe to commit your code — no secrets in the repository
| Pillar | Component | Description |
|---|---|---|
| Security | CredentialManager |
DPAPI-encrypted storage of Host, Port, Username, Password in %APPDATA%/EtherMount/credentials.dat |
| GUI | MainWindow + TrayApplication + SettingsDialog |
Main window with toolbar (Settings, Mount VPS, Unmount VPS, Exit); system tray; inline settings and documentation |
| VFS | EtherMountFS |
WinFSP skeleton: mounts \\EtherMount\VPS as drive Z:; SFTP mapping in future versions |
- Windows 10/11
- C++17
- CMake 3.16+
- vcpkg (for libssh2, Qt6)
- WinFSP (install separately)
vcpkg installWinFSP is not in vcpkg. Install via:
winget install WinFsp.WinFspOr download from WinFSP releases. Choose the Developer option to install headers and libs.
Default install path: C:\Program Files (x86)\WinFsp. If different, set WINFSP_ROOT before configuring:
$env:WINFSP_ROOT = "C:\Path\To\WinFsp"cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=$env:VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
cmake --build build --config Release.\build\Release\EtherMount.exeThe app opens a main window with settings and documentation, plus a system tray icon for quick access.
- Main window opens on startup with toolbar: Settings | Mount VPS | Unmount VPS | Exit
- Enter Host/IP, Port (default 22), Username, Password in the settings form
- Click Save credentials — encrypted with DPAPI and stored locally
- Click Mount VPS — drive Z: appears (UNC:
\\EtherMount\VPS) - Click Unmount VPS — drive is unmounted
- Right-click tray icon for the same menu; double-click to restore the main window
EtherMount/
├── CMakeLists.txt
├── vcpkg.json
├── README.md
├── include/EtherMount/
│ ├── CredentialManager.hpp # Pillar 1: Secure credential storage
│ ├── SftpClient.hpp # libssh2 SFTP client (from v0.01)
│ ├── MainWindow.hpp # Pillar 2: Main window (toolbar, settings, docs)
│ ├── SettingsDialog.hpp # Pillar 2: Qt Settings dialog
│ ├── TrayApplication.hpp # Pillar 2: System tray + menu
│ └── EtherMountFS.hpp # Pillar 3: WinFSP launcher
└── src/
├── main.cpp # Entry point, wires all pillars
├── CredentialManager.cpp
├── SftpClient.cpp
├── SettingsDialog.cpp
├── MainWindow.cpp
├── TrayApplication.cpp
└── EtherMountFS.cpp
main.cpp
|
v
TrayApplication (QApplication)
|
+-- CredentialManager
| save() -> CryptProtectData -> %APPDATA%/EtherMount/credentials.dat
| load() -> CryptUnprotectData -> VpsCredentials
|
+-- SettingsDialog
| loadFromStorage() -> CredentialManager::load()
| saveToStorage() -> CredentialManager::save()
|
+-- EtherMountFS
| mount(creds) -> FspLoad, FspFileSystemCreate, SetMountPoint(Z:), StartDispatcher
| unmount() -> FspFileSystemStopDispatcher, FspFileSystemDelete
|
+-- Tray menu actions
Settings -> show SettingsDialog
Mount VPS -> credentialManager_.load() -> fileSystem_->mount(creds)
Unmount VPS-> fileSystem_->unmount()
Exit -> unmount if needed, quit()
- EtherMountFS is a skeleton: Z: mounts and shows an empty root. SFTP read/write is not yet implemented.
- Credentials are stored per-user (DPAPI user context).
- Single mount point (Z:) — configurable drive letter in future.
- Map WinFSP operations (Read, Write, ReadDirectory, etc.) to SftpClient
- Configurable drive letter
- Optional key-based authentication