Skip to content

Windows Clients

Version: 1.0 (v3.6 milestone) Last validated: 2026-02-28 Windows version tested: Windows 11 24H2 DittoFS version: v0.7.1-42-ga6c59f39

This document provides a comprehensive guide for setting up a Windows 11 VM to test DittoFS, along with a formal validation checklist covering SMB file operations, NFS client testing, and application compatibility.


  1. Windows VM Setup Guide
  2. SMB Validation Checklist
  3. NFS Client Validation Checklist
  4. Known Limitations
  5. Troubleshooting
  6. Conformance Test Results

Section titled “Option A: UTM (macOS ARM Host) — Recommended for Apple Silicon”

UTM is the recommended VM solution for Apple Silicon Macs running DittoFS.

  1. Download and install UTM from mac.getutm.app
  2. Download Windows 11 ARM ISO from Microsoft UUP dump or the official Microsoft site
  3. Create a new VM:
    • Click “Create a New Virtual Machine” > “Virtualize”
    • Select “Windows”
    • Allocate at least 4 GB RAM and 2 CPU cores
    • Allocate 64 GB disk (minimum)
    • Enable “Install drivers and SPICE tools”
  4. Attach the Windows 11 ARM ISO and boot the VM
  5. Complete Windows 11 installation (skip network during OOBE if needed, use a local account)

For x86 hosts or non-macOS environments:

  • VirtualBox: Download from virtualbox.org, create a Windows 11 x64 VM with at least 4 GB RAM, enable EFI and TPM 2.0 emulation
  • Hyper-V: Available on Windows 10/11 Pro/Enterprise, enable via “Turn Windows features on or off”

The Windows VM must be able to reach the DittoFS host machine over the network.

Network ModeWhen to UseConfiguration
BridgedVM and host on same LANVM gets its own IP from DHCP; use host’s LAN IP to connect
Host-onlyIsolated testingConfigure a host-only network adapter; use host-only gateway IP
Shared (NAT)Default in UTMForward ports 12445 (SMB) and 12049 (NFS) from host to guest

Verify connectivity: From the Windows VM, open PowerShell and run:

Terminal window
Test-NetConnection -ComputerName <host-ip> -Port 12445
  1. Open Settings > Apps > Optional Features > More Windows features
  2. Expand Services for NFS
  3. Check Client for NFS
  4. Click OK and restart if prompted

The SMB client is installed and enabled by default on Windows 11. No additional setup is needed.

Windows 11 24H2 blocks insecure guest logons by default. Since DittoFS currently uses guest/anonymous SMB sessions for initial negotiation, you must enable insecure guest logons.

Option 1: Group Policy Editor (gpedit.msc)

  1. Press Win+R, type gpedit.msc, press Enter
  2. Navigate to: Computer Configuration > Administrative Templates > Network > Lanman Workstation
  3. Double-click “Enable insecure guest logons”
  4. Set to Enabled, click OK
  5. Restart the Lanman Workstation service or reboot

Option 2: Registry (for Windows 11 Home or scripted setup)

Terminal window
# Run PowerShell as Administrator
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" -Name "AllowInsecureGuestAuth" -Value 1 -Type DWord
Restart-Service LanmanWorkstation

Registry path: HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters\AllowInsecureGuestAuth = 1 (DWORD)

SoftwarePurpose
VS CodeTest opening projects from SMB share, file editing, integrated terminal
Microsoft OfficeTest Word/Excel save/open cycles with Office file locking
7-Zip or WinRARTest archive extraction to/from share

On the macOS/Linux host machine:

Terminal window
# 1. Build DittoFS
go build -o dfs cmd/dfs/main.go
go build -o dfsctl cmd/dfsctl/main.go
# 2. Initialize config (if first time)
./dfs config init
# 3. Start DittoFS
./dfs start
# 4. Create test stores
./dfsctl store metadata add --name test-meta --type memory
./dfsctl store block local add --name test-blocks --type memory
# 5. Create test shares
./dfsctl share create --name /smbbasic --metadata test-meta --local test-blocks
# 6. Create test users
./dfsctl user create --username testuser # Enter password when prompted
# 7. Grant permissions
./dfsctl share permission grant /smbbasic --user testuser --level read-write
# 8. Verify SMB adapter is listening
./dfsctl adapter list
# Should show SMB adapter on port 12445

Connect from Windows:

Terminal window
# Mapped drive (persistent)
net use Z: \\<host-ip>\smbbasic /user:testuser <password>
# UNC path (direct access)
explorer \\<host-ip>\smbbasic

Test both mapped drives (e.g., Z:) and UNC paths (e.g., \\host\smbbasic) for each category.

#TestMapped DriveUNC PathNotes
C-01Connect with net use Z: \\host\smbbasic /user:testuser <pass>[ ] Pass / [ ] Fail / [ ] SkipN/A
C-02Browse via Explorer \\host\smbbasicN/A[ ] Pass / [ ] Fail / [ ] Skip
C-03Disconnect with net use Z: /delete[ ] Pass / [ ] Fail / [ ] SkipN/A
C-04Reconnect after disconnect[ ] Pass / [ ] Fail / [ ] Skip[ ] Pass / [ ] Fail / [ ] Skip
#TestMapped DriveUNC PathNotes
E-01Create new text file (right-click > New > Text Document)[ ] Pass / [ ] Fail / [ ] Skip[ ] Pass / [ ] Fail / [ ] Skip
E-02Create new folder[ ] Pass / [ ] Fail / [ ] Skip[ ] Pass / [ ] Fail / [ ] Skip
E-03Rename file[ ] Pass / [ ] Fail / [ ] Skip[ ] Pass / [ ] Fail / [ ] Skip
E-04Rename folder[ ] Pass / [ ] Fail / [ ] Skip[ ] Pass / [ ] Fail / [ ] Skip
E-05Delete file (Delete key or right-click > Delete)[ ] Pass / [ ] Fail / [ ] Skip[ ] Pass / [ ] Fail / [ ] Skip
E-06Delete folder (empty)[ ] Pass / [ ] Fail / [ ] Skip[ ] Pass / [ ] Fail / [ ] Skip
E-07Delete folder (non-empty)[ ] Pass / [ ] Fail / [ ] Skip[ ] Pass / [ ] Fail / [ ] Skip
E-08Copy file (Ctrl+C / Ctrl+V)[ ] Pass / [ ] Fail / [ ] Skip[ ] Pass / [ ] Fail / [ ] Skip
E-09Move file (Ctrl+X / Ctrl+V)[ ] Pass / [ ] Fail / [ ] Skip[ ] Pass / [ ] Fail / [ ] Skip
E-10Drag-and-drop file within share[ ] Pass / [ ] Fail / [ ] Skip[ ] Pass / [ ] Fail / [ ] Skip
E-11Copy file from local disk to share[ ] Pass / [ ] Fail / [ ] Skip[ ] Pass / [ ] Fail / [ ] Skip
E-12Copy file from share to local disk[ ] Pass / [ ] Fail / [ ] Skip[ ] Pass / [ ] Fail / [ ] Skip
E-13View file Properties (General tab)[ ] Pass / [ ] Fail / [ ] Skip[ ] Pass / [ ] Fail / [ ] Skip
E-14View file Properties (Security tab)[ ] Pass / [ ] Fail / [ ] Skip[ ] Pass / [ ] Fail / [ ] SkipShould show Owner + DACL
#TestCommandResultNotes
CMD-01List directorydir Z:\[ ] Pass / [ ] Fail / [ ] Skip
CMD-02Display file contentstype Z:\testfile.txt[ ] Pass / [ ] Fail / [ ] Skip
CMD-03Copy filecopy Z:\file1.txt Z:\file2.txt[ ] Pass / [ ] Fail / [ ] Skip
CMD-04Move filemove Z:\file2.txt Z:\subfolder\[ ] Pass / [ ] Fail / [ ] Skip
CMD-05Rename fileren Z:\file1.txt newname.txt[ ] Pass / [ ] Fail / [ ] Skip
CMD-06Delete filedel Z:\newname.txt[ ] Pass / [ ] Fail / [ ] Skip
CMD-07Create directorymkdir Z:\testdir[ ] Pass / [ ] Fail / [ ] Skip
CMD-08Remove directoryrmdir Z:\testdir[ ] Pass / [ ] Fail / [ ] Skip
CMD-09View ACLsicacls Z:\[ ] Pass / [ ] Fail / [ ] SkipShould show Owner + DACL entries
CMD-10View attributesattrib Z:\testfile.txt[ ] Pass / [ ] Fail / [ ] Skip
CMD-11File system infofsutil fsinfo volumeinfo Z:\[ ] Pass / [ ] Fail / [ ] Skip
#TestCommandResultNotes
PS-01Get file infoGet-Item Z:\testfile.txt[ ] Pass / [ ] Fail / [ ] Skip
PS-02List directoryGet-ChildItem Z:\ -Recurse[ ] Pass / [ ] Fail / [ ] Skip
PS-03Create fileNew-Item Z:\pstest.txt -ItemType File -Value "hello"[ ] Pass / [ ] Fail / [ ] Skip
PS-04Create directoryNew-Item Z:\psdir -ItemType Directory[ ] Pass / [ ] Fail / [ ] Skip
PS-05Remove fileRemove-Item Z:\pstest.txt[ ] Pass / [ ] Fail / [ ] Skip
PS-06Remove directoryRemove-Item Z:\psdir -Recurse[ ] Pass / [ ] Fail / [ ] Skip
PS-07Copy fileCopy-Item Z:\file1.txt Z:\file_copy.txt[ ] Pass / [ ] Fail / [ ] Skip
PS-08Move fileMove-Item Z:\file_copy.txt Z:\moved.txt[ ] Pass / [ ] Fail / [ ] Skip
PS-09Get ACLGet-Acl Z:\testfile.txt[ ] Pass / [ ] Fail / [ ] SkipShould show Owner + Access rules
PS-10Set ACL$acl = Get-Acl Z:\testfile.txt; Set-Acl Z:\testfile.txt $acl[ ] Pass / [ ] Fail / [ ] SkipRound-trip test
PS-11Write contentSet-Content Z:\pstest.txt "new content"[ ] Pass / [ ] Fail / [ ] Skip
#TestStepsResultNotes
OFF-01Word: Create new documentOpen Word > Save As to Z:\ as .docx[ ] Pass / [ ] Fail / [ ] Skip
OFF-02Word: Reopen documentDouble-click the .docx on Z:\[ ] Pass / [ ] Fail / [ ] Skip
OFF-03Word: Edit and saveModify text, Ctrl+S[ ] Pass / [ ] Fail / [ ] Skip
OFF-04Excel: Create workbookOpen Excel > Add data + formulas > Save As .xlsx to Z:\[ ] Pass / [ ] Fail / [ ] Skip
OFF-05Excel: Reopen workbookDouble-click the .xlsx on Z:\[ ] Pass / [ ] Fail / [ ] Skip
OFF-06Excel: Verify formulasCheck that formulas compute correctly after reopen[ ] Pass / [ ] Fail / [ ] Skip
OFF-07Large file save (10MB+)Create a large document with images, save to Z:\[ ] Pass / [ ] Fail / [ ] Skip
#TestStepsResultNotes
VS-01Open folder from shareFile > Open Folder > select Z:\ or \host\smbbasic[ ] Pass / [ ] Fail / [ ] Skip
VS-02Create new fileFile > New File > save to share[ ] Pass / [ ] Fail / [ ] Skip
VS-03Edit and saveModify file content, Ctrl+S[ ] Pass / [ ] Fail / [ ] Skip
VS-04Search across filesCtrl+Shift+F, search for a string[ ] Pass / [ ] Fail / [ ] Skip
VS-05Integrated terminalOpen terminal, run dir on share path[ ] Pass / [ ] Fail / [ ] Skip
VS-06Git operations (if .git exists)git status, git log on share[ ] Pass / [ ] Fail / [ ] SkipBest-effort
#TestCommandResultNotes
FS-011 MB filefsutil file createnew Z:\test_1mb.bin 1048576[ ] Pass / [ ] Fail / [ ] Skip
FS-0210 MB filefsutil file createnew Z:\test_10mb.bin 10485760[ ] Pass / [ ] Fail / [ ] Skip
FS-0350 MB filefsutil file createnew Z:\test_50mb.bin 52428800[ ] Pass / [ ] Fail / [ ] Skip
FS-04100 MB filefsutil file createnew Z:\test_100mb.bin 104857600[ ] Pass / [ ] Fail / [ ] Skip
FS-05Read back 1 MBcopy Z:\test_1mb.bin NUL[ ] Pass / [ ] Fail / [ ] Skip
FS-06Read back 10 MBcopy Z:\test_10mb.bin NUL[ ] Pass / [ ] Fail / [ ] Skip
FS-07Read back 50 MBcopy Z:\test_50mb.bin NUL[ ] Pass / [ ] Fail / [ ] Skip
FS-08Read back 100 MBcopy Z:\test_100mb.bin NUL[ ] Pass / [ ] Fail / [ ] Skip
FS-09Verify integrityWrite known content, read back, compare[ ] Pass / [ ] Fail / [ ] SkipUse certutil -hashfile for SHA256

Windows NFS client support is best-effort. The Windows Services for NFS client has known limitations compared to Linux/macOS NFS clients.

#TestCommandResultNotes
NFS-01Mount NFS sharemount -o anon \\<host-ip>\export Z:[ ] Pass / [ ] Fail / [ ] SkipPort 12049
NFS-02List share contentsdir Z:\[ ] Pass / [ ] Fail / [ ] Skip
NFS-03Unmountumount Z:[ ] Pass / [ ] Fail / [ ] Skip
#TestCommandResultNotes
NFS-04Create fileecho test > Z:\nfstest.txt[ ] Pass / [ ] Fail / [ ] Skip
NFS-05Read filetype Z:\nfstest.txt[ ] Pass / [ ] Fail / [ ] Skip
NFS-06Create directorymkdir Z:\nfsdir[ ] Pass / [ ] Fail / [ ] Skip
NFS-07Delete filedel Z:\nfstest.txt[ ] Pass / [ ] Fail / [ ] Skip
NFS-08Delete directoryrmdir Z:\nfsdir[ ] Pass / [ ] Fail / [ ] Skip

The following features are not supported in DittoFS v3.6. These are architectural decisions, not bugs.

LimitationImpactWorkaroundFuture Phase
No Alternate Data Streams (ADS)NTFS named streams (:Zone.Identifier, etc.) not availableNone — files from Internet may lack “Unblock” optionv3.8 Phase 43
No Change NotifyWindows Explorer does not auto-refresh when files change externallyPress F5 to manually refreshv3.8 Phase 40.5
No SMB3 encryption/signing upgradeSMB 2.0.2/2.1 only — no AES-CCM/GCM encryptionTraffic is unencrypted; use VPN for untrusted networksv3.8 Phase 39
No durable handlesReconnection after network interruption not supported; open files lost on disconnectSave frequently; expect re-authentication after disconnectsv3.8 Phase 42
No server-side copyFSCTL_SRV_COPYCHUNK not implemented; copies go through clientLarge file copies may be slower than native SMB serversv3.8 Phase 43
No multi-channelSingle TCP connection per sessionPerformance limited to single connection throughputv3.8
NFS from WindowsWindows NFS client (Services for NFS) has limited functionalityUse SMB for primary Windows file access; NFS is best-effort
No NTFS object IDsFSCTL_CREATE_OR_GET_OBJECT_ID not supportedNo impact for typical workflowsNot planned
No DFS referralsDistributed File System namespace not supportedAccess shares directly by server IP/hostnameNot planned

SymptomCauseSolution
”The network path was not found”DittoFS not running or firewall blocking portVerify dfs start is running; check port 12445 is accessible with Test-NetConnection
”Access denied”Invalid credentials or missing share permissionsVerify user exists (dfsctl user list), check share permissions (dfsctl share permission list /smbbasic)
“The specified network name is no longer available”Connection dropped during operationRetry net use; check DittoFS logs for errors
”Insecure guest logon” errorWindows 11 24H2 blocks guest logons by defaultFollow Guest Auth GPO Configuration above
SymptomCauseSolution
Explorer shows blank Security tabSD query failed or returned malformed dataCheck DittoFS logs for SD synthesis errors; ensure Phase 31 ACL support is active
Explorer shows “Everyone: Full Control”SD synthesis not returning proper owner/DACLVerify machine SID is initialized (dfsctl settings list); ensure share has assigned user
icacls shows unexpected permissionsPOSIX-to-DACL translation differs from NTFS semanticsThis is expected behavior; DittoFS synthesizes DACLs from Unix mode bits
Set-Acl returns errorBest-effort ACL mapping failedDittoFS translates SMB SET_INFO ACL changes to Unix mode bits; complex ACLs may not map cleanly
SymptomCauseSolution
Slow large file copiesNo server-side copy; data traverses clientExpected for v3.6; server-side copy planned for v3.8
Explorer feels sluggishNo Change Notify; Explorer polls for changesPress F5 to refresh; reduce auto-refresh extensions
Office save takes longOffice uses multiple SMB operations (create temp, write, rename)Expected behavior; ensure sufficient network bandwidth
SymptomCauseSolution
mount command not foundServices for NFS not installedInstall via Settings > Apps > Optional Features > More Windows features > Services for NFS > Client for NFS
Mount fails with “Network Error”Wrong port or protocolEnsure DittoFS NFS adapter is on port 12049; try mount -o anon,nolock \\host\export Z:
Permission denied on NFS mountUID/GID mapping issuesWindows NFS client uses anonymous UID/GID by default; configure in NFS client settings or use mount -o anon

DittoFS is validated against two industry-standard conformance test suites.

WPTS (Microsoft WindowsProtocolTestSuites)

Section titled “WPTS (Microsoft WindowsProtocolTestSuites)”
  • Suite: MS-SMB2 BVT (Build Verification Tests)
  • Baseline: 133/240 tests passing (Phase 29.8 initial baseline)
  • Expected improvements: Phases 30-32 fixes (sparse READ, directory listing, ACL support, MxAc, QFid) should increase pass count
  • Known failures: See test/smb-conformance/KNOWN_FAILURES.md
  • Run locally:
    Terminal window
    cd test/smb-conformance
    make test # Run WPTS BVT suite
    make test-quick # Quick run (memory profile only)
  • Suite: Full SMB2 test suite (smb2.*)
  • Image: quay.io/samba.org/samba-toolbox:v0.8
  • Known failures: See test/smb-conformance/smbtorture/KNOWN_FAILURES.md
  • Run locally:
    Terminal window
    cd test/smb-conformance
    make smbtorture # Run full smbtorture suite
    make smbtorture-quick # Quick run (memory profile only)
Terminal window
cd test/smb-conformance
make test smbtorture # Run WPTS + smbtorture in sequence

Both test suites run in CI via .github/workflows/smb-conformance.yml on every PR touching SMB-related code.


VersionDateMilestoneChanges
1.02026-02-28v3.6Initial checklist with Explorer, cmd.exe, PowerShell, Office, VS Code, NFS, file size tests

Document: docs/WINDOWS_TESTING.md Phase: 32-windows-integration-testing Created: 2026-02-28