diff --git a/License.txt b/License.txt
index 01afcd10..372164f9 100644
--- a/License.txt
+++ b/License.txt
@@ -6,7 +6,7 @@ permissions to Free/Libre and Open Source Software ("FLOSS") without requiring
that such software is covered by the GPLv3.
1. Permission to link with a platform specific version of the WinFsp DLL
- (one of: winfsp-x64.dll, winfsp-x86.dll, winfsp-msil.dll).
+ (one of: winfsp-a64.dll, winfsp-x64.dll, winfsp-x86.dll, winfsp-msil.dll).
2. Permission to distribute unmodified binary releases of the WinFsp
installer (as released by the WinFsp project).
diff --git a/appveyor.yml b/appveyor.yml
index f3353fa6..b935b3e2 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -46,6 +46,8 @@ build_script:
#- C:\cygwin64\bin\bash --login -c "make -C '%CD%\opt\cygfuse' dist"
#- C:\cygwin\setup-x86.exe -qnNd -P cygport
#- C:\cygwin\bin\bash --login -c "make -C '%CD%\opt\cygfuse' dist"
+# remove ARM64 project configurations to build in VS2015
+- tools\gensrc\remove-build-arm64.bat
# build winfsp
- tools\build.bat %CONFIGURATION%
diff --git a/build/VStudio/build.common.props b/build/VStudio/build.common.props
new file mode 100644
index 00000000..1a54bd29
--- /dev/null
+++ b/build/VStudio/build.common.props
@@ -0,0 +1,30 @@
+
+
+
+
+
+ NTDDI_VERSION=0x06010000;_WIN32_WINNT=0x0601;MyProductName=$(MyProductName);MyProductFileName=$(MyProductFileName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas);MyFullVersion=$(MyFullVersion);MyFspFsctlDeviceClassGuid=$(MyFspFsctlDeviceClassGuid);MyFspFsvrtDeviceClassGuid=$(MyFspFsvrtDeviceClassGuid)
+
+
+ MyProductName=$(MyProductName);MyProductFileName=$(MyProductFileName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas);MyFullVersion=$(MyFullVersion);MyFspFsctlDeviceClassGuid=$(MyFspFsctlDeviceClassGuid);MyFspFsvrtDeviceClassGuid=$(MyFspFsvrtDeviceClassGuid)
+
+
+
+
+ 4996
+
+
+
+
+ true
+
+
+
+
+ DebugFull
+
+
+
+ false
+
+
\ No newline at end of file
diff --git a/build/VStudio/dotnet/winfsp.net.csproj b/build/VStudio/dotnet/winfsp.net.csproj
index 006d4522..52b5eebf 100644
--- a/build/VStudio/dotnet/winfsp.net.csproj
+++ b/build/VStudio/dotnet/winfsp.net.csproj
@@ -1,6 +1,6 @@
-
+
Debug
diff --git a/build/VStudio/installer/CustomActions/CustomActions.vcxproj b/build/VStudio/installer/CustomActions/CustomActions.vcxproj
index 2cf785db..0e43db04 100644
--- a/build/VStudio/installer/CustomActions/CustomActions.vcxproj
+++ b/build/VStudio/installer/CustomActions/CustomActions.vcxproj
@@ -1,6 +1,6 @@
-
+
Debug
@@ -43,21 +43,20 @@
<_ProjectFileVersion>14.0.25123.0
- $(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
true
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
- $(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
false
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
Disabled
$(WIX)sdk\VS2015\inc;%(AdditionalIncludeDirectories)
WIN32;_DEBUG;_WINDOWS;_USRDLL;CUSTOMACTIONTEST_EXPORTS;%(PreprocessorDefinitions)
- true
Default
MultiThreaded
NotUsing
diff --git a/build/VStudio/installer/Product.wxs b/build/VStudio/installer/Product.wxs
index a7a17729..7bcead3c 100644
--- a/build/VStudio/installer/Product.wxs
+++ b/build/VStudio/installer/Product.wxs
@@ -22,6 +22,15 @@
DowngradeErrorMessage="A newer version of $(var.MyProductName) is already installed." />
+
+
+
+
$(var.MyProductName).Launcher
Software\$(var.MyProductName)\Services
Software\$(var.MyProductName)
@@ -62,6 +71,9 @@
+
+
+
@@ -69,24 +81,46 @@
-
-
-
- VersionNT64
+
+
+
+
-
-
- VersionNT64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- NOT VersionNT64
+
+
+
-
-
- NOT VersionNT64
+
+
+
+
+
+
+
@@ -106,52 +140,90 @@
-->
-
-
-
+
+
+
- VersionNT64
+
-
-
- VersionNT64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- NOT VersionNT64
+
+
+
-
-
+
+
+
+
+
+
- NOT VersionNT64
+
+
+
+
@@ -159,6 +231,9 @@
+
+
+
@@ -173,6 +248,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -304,6 +408,16 @@
+
+
+
+
+
+
- VersionNT64
+
@@ -321,7 +435,17 @@
Name="fuse.pc"
Source="..\build\$(var.Configuration)\fuse-x86.pc"
KeyPath="yes" />
- NOT VersionNT64
+
+
+
+
+
+
+
@@ -331,7 +455,7 @@
Name="fuse3.pc"
Source="..\build\$(var.Configuration)\fuse3-x64.pc"
KeyPath="yes" />
- VersionNT64
+
@@ -341,7 +465,7 @@
Name="fuse3.pc"
Source="..\build\$(var.Configuration)\fuse3-x86.pc"
KeyPath="yes" />
- NOT VersionNT64
+
@@ -378,6 +502,9 @@
+
+
+
@@ -588,36 +715,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -627,18 +772,31 @@
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -659,10 +817,13 @@
+
+
+
@@ -676,10 +837,12 @@
+
+
@@ -735,16 +898,22 @@
+
-
+
-
+
+
+
+
+
+
diff --git a/build/VStudio/installer/winfsp_msi.wixproj b/build/VStudio/installer/winfsp_msi.wixproj
index 2b08a239..638f8a5d 100644
--- a/build/VStudio/installer/winfsp_msi.wixproj
+++ b/build/VStudio/installer/winfsp_msi.wixproj
@@ -1,6 +1,6 @@
-
+
Debug
x86
diff --git a/build/VStudio/testing/fsbench.vcxproj b/build/VStudio/testing/fsbench.vcxproj
index d5f80b4b..699f16fd 100644
--- a/build/VStudio/testing/fsbench.vcxproj
+++ b/build/VStudio/testing/fsbench.vcxproj
@@ -1,11 +1,19 @@
-
+
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -45,6 +53,12 @@
$(DefaultPlatformToolset)
Unicode
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
Application
false
@@ -52,6 +66,13 @@
true
Unicode
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -66,33 +87,51 @@
+
+
+
+
+
+
true
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
true
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ true
+ $(ProjectName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ false
+ $(ProjectName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
@@ -124,6 +163,21 @@
Console
+
+
+
+
+ Level3
+ Disabled
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ ..\..\..\ext
+
+
+ Console
+
+
Level3
@@ -162,6 +216,25 @@
true
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ ..\..\..\ext
+
+
+ Console
+ true
+ true
+
+
TurnOffAllWarnings
@@ -169,9 +242,13 @@
TurnOffAllWarnings
false
TurnOffAllWarnings
+ TurnOffAllWarnings
false
+ false
TurnOffAllWarnings
+ TurnOffAllWarnings
false
+ false
diff --git a/build/VStudio/testing/fscrash.vcxproj b/build/VStudio/testing/fscrash.vcxproj
index 4dc87eb7..87874269 100644
--- a/build/VStudio/testing/fscrash.vcxproj
+++ b/build/VStudio/testing/fscrash.vcxproj
@@ -1,11 +1,19 @@
-
+
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -45,6 +53,12 @@
$(DefaultPlatformToolset)
Unicode
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
Application
false
@@ -52,6 +66,13 @@
true
Unicode
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -66,33 +87,51 @@
+
+
+
+
+
+
true
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
true
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ true
+ $(ProjectName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ false
+ $(ProjectName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
@@ -124,6 +163,21 @@
Console
+
+
+
+
+ Level3
+ Disabled
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ ..\..\..\tst\memfs;..\..\..\inc
+
+
+ Console
+
+
Level3
@@ -162,6 +216,25 @@
true
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ ..\..\..\tst\memfs;..\..\..\inc
+
+
+ Console
+ true
+ true
+
+
diff --git a/build/VStudio/testing/memfs-dotnet.csproj b/build/VStudio/testing/memfs-dotnet.csproj
index 1ccb65e5..a198c347 100644
--- a/build/VStudio/testing/memfs-dotnet.csproj
+++ b/build/VStudio/testing/memfs-dotnet.csproj
@@ -1,5 +1,6 @@
+
Debug
diff --git a/build/VStudio/testing/memfs.vcxproj b/build/VStudio/testing/memfs.vcxproj
index 5574fc4b..a946259b 100644
--- a/build/VStudio/testing/memfs.vcxproj
+++ b/build/VStudio/testing/memfs.vcxproj
@@ -1,11 +1,19 @@
-
+
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -46,6 +54,12 @@
$(DefaultPlatformToolset)
Unicode
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
Application
false
@@ -53,6 +67,13 @@
true
Unicode
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -67,33 +88,51 @@
+
+
+
+
+
+
true
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
true
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ true
+ $(ProjectName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ false
+ $(ProjectName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
@@ -127,6 +166,22 @@
$(OutDir)$(TargetName).public.pdb
+
+
+
+
+ Level3
+ Disabled
+ MEMFS_STANDALONE;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ ..\..\..\src;..\..\..\inc
+ MultiThreaded
+
+
+ Console
+ $(OutDir)$(TargetName).public.pdb
+
+
Level3
@@ -169,6 +224,27 @@
/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ MEMFS_STANDALONE;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ ..\..\..\src;..\..\..\inc
+ MultiThreaded
+
+
+ Console
+ true
+ true
+ $(OutDir)$(TargetName).public.pdb
+ /PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)
+
+
{4a7c0b21-9e10-4c81-92de-1493efcf24eb}
diff --git a/build/VStudio/testing/winfsp-tests.vcxproj b/build/VStudio/testing/winfsp-tests.vcxproj
index 6db59b59..c2dda800 100644
--- a/build/VStudio/testing/winfsp-tests.vcxproj
+++ b/build/VStudio/testing/winfsp-tests.vcxproj
@@ -1,11 +1,19 @@
-
+
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -45,6 +53,12 @@
$(DefaultPlatformToolset)
Unicode
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
Application
false
@@ -52,6 +66,13 @@
true
Unicode
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -66,33 +87,51 @@
+
+
+
+
+
+
true
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
true
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ true
+ $(ProjectName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ false
+ $(ProjectName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
@@ -126,6 +165,22 @@
ntdll.lib;netapi32.lib;dbghelp.lib;%(AdditionalDependencies)
+
+
+
+
+ Level3
+ Disabled
+ __func__=__FUNCTION__;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ ..\..\..\tst\memfs;..\..\..\src;..\..\..\inc;..\..\..\ext
+ MultiThreaded
+
+
+ Console
+ ntdll.lib;netapi32.lib;dbghelp.lib;%(AdditionalDependencies)
+
+
Level3
@@ -166,16 +221,40 @@
ntdll.lib;netapi32.lib;dbghelp.lib;%(AdditionalDependencies)
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ __func__=__FUNCTION__;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ ..\..\..\tst\memfs;..\..\..\src;..\..\..\inc;..\..\..\ext
+ MultiThreaded
+
+
+ Console
+ true
+ true
+ ntdll.lib;netapi32.lib;dbghelp.lib;%(AdditionalDependencies)
+
+
false
false
false
+ false
false
+ false
TurnOffAllWarnings
TurnOffAllWarnings
TurnOffAllWarnings
+ TurnOffAllWarnings
TurnOffAllWarnings
+ TurnOffAllWarnings
diff --git a/build/VStudio/tools/fsptool.vcxproj b/build/VStudio/tools/fsptool.vcxproj
index 71e5b5b8..d08be9bf 100644
--- a/build/VStudio/tools/fsptool.vcxproj
+++ b/build/VStudio/tools/fsptool.vcxproj
@@ -1,11 +1,19 @@
-
+
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -45,6 +53,12 @@
$(DefaultPlatformToolset)
Unicode
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
Application
false
@@ -52,6 +66,13 @@
true
Unicode
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -66,33 +87,51 @@
+
+
+
+
+
+
true
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
true
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ true
+ $(ProjectName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ false
+ $(ProjectName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
@@ -130,6 +169,24 @@
$(OutDir)$(TargetName).public.pdb
+
+
+
+
+ Level3
+ Disabled
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ ..\..\..\src;..\..\..\inc
+ Default
+ MultiThreaded
+ false
+
+
+ Console
+ true
+ $(OutDir)$(TargetName).public.pdb
+
+
Level3
@@ -174,6 +231,28 @@
/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ ..\..\..\src;..\..\..\inc
+ MultiThreaded
+ false
+
+
+ Console
+ true
+ true
+ true
+ $(OutDir)$(TargetName).public.pdb
+ /PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)
+
+
{4a7c0b21-9e10-4c81-92de-1493efcf24eb}
diff --git a/build/VStudio/tools/launchctl.vcxproj b/build/VStudio/tools/launchctl.vcxproj
index 39849310..d3dd95da 100644
--- a/build/VStudio/tools/launchctl.vcxproj
+++ b/build/VStudio/tools/launchctl.vcxproj
@@ -1,11 +1,19 @@
-
+
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -45,6 +53,12 @@
$(DefaultPlatformToolset)
Unicode
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
Application
false
@@ -52,6 +66,13 @@
true
Unicode
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -66,33 +87,51 @@
+
+
+
+
+
+
true
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
true
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ true
+ $(ProjectName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ false
+ $(ProjectName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
@@ -134,6 +173,26 @@
$(OutDir)$(TargetName).public.pdb
+
+
+
+
+ Level3
+ Disabled
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ ..\..\..\src;..\..\..\inc
+ false
+ Default
+ MultiThreaded
+
+
+
+
+ Console
+ true
+ $(OutDir)$(TargetName).public.pdb
+
+
Level3
@@ -182,6 +241,30 @@
/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ ..\..\..\src;..\..\..\inc
+ false
+ MultiThreaded
+
+
+
+
+ Console
+ true
+ true
+ true
+ $(OutDir)$(TargetName).public.pdb
+ /PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)
+
+
@@ -190,7 +273,9 @@
_UNICODE;UNICODE;%(PreprocessorDefinitions)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
+ _UNICODE;UNICODE;%(PreprocessorDefinitions)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
+ _UNICODE;UNICODE;%(PreprocessorDefinitions)
diff --git a/build/VStudio/tools/launcher.vcxproj b/build/VStudio/tools/launcher.vcxproj
index 10f09877..d23b9dbc 100644
--- a/build/VStudio/tools/launcher.vcxproj
+++ b/build/VStudio/tools/launcher.vcxproj
@@ -1,11 +1,19 @@
-
+
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -45,6 +53,12 @@
$(DefaultPlatformToolset)
Unicode
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
Application
false
@@ -52,6 +66,13 @@
true
Unicode
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -66,33 +87,51 @@
+
+
+
+
+
+
true
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
true
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ true
+ $(ProjectName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(ProjectName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(ProjectName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ false
+ $(ProjectName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
@@ -136,6 +175,27 @@
$(OutDir)$(TargetName).public.pdb
+
+
+
+
+ Level3
+ Disabled
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ ..\..\..\src;..\..\..\inc
+ Default
+ false
+ MultiThreaded
+
+
+
+
+ Console
+ true
+ %(AdditionalDependencies);rpcrt4.lib;userenv.lib
+ $(OutDir)$(TargetName).public.pdb
+
+
Level3
@@ -186,6 +246,31 @@
/PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ ..\..\..\src;..\..\..\inc
+ false
+ MultiThreaded
+
+
+
+
+ Console
+ true
+ true
+ true
+ %(AdditionalDependencies);rpcrt4.lib;userenv.lib
+ $(OutDir)$(TargetName).public.pdb
+ /PDBALTPATH:$(TargetName).pdb %(AdditionalOptions)
+
+
@@ -200,7 +285,9 @@
_UNICODE;UNICODE;%(PreprocessorDefinitions)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
+ _UNICODE;UNICODE;%(PreprocessorDefinitions)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
+ _UNICODE;UNICODE;%(PreprocessorDefinitions)
diff --git a/build/VStudio/version.properties b/build/VStudio/version.properties
index df7a5bc3..e85358d3 100644
--- a/build/VStudio/version.properties
+++ b/build/VStudio/version.properties
@@ -17,10 +17,10 @@
Navimatics LLC
2015-$([System.DateTime]::Now.ToString(`yyyy`)) Bill Zissimopoulos
- 1.10
+ 1.11
- 2022
- Gold
+ 2022+ARM64 Beta1
+ Beta
$(MyCanonicalVersion).$(MyBuildNumber)
$(MyVersion.Replace('.',',')),0
@@ -29,35 +29,12 @@
$(MyCanonicalVersion.Substring(0,$(MyVersion.IndexOf('.')))).0
$(MyAssemblyPolicyVersion).0.0
+ a64
+ x64
+ x86
+
{ 0x6f9d25fa, 0x6dee, 0x4a9d, { 0x80, 0xf5, 0xe9, 0x8e, 0x14, 0xf3, 0x5e, 0x54 } }
{ 0xb48171c3, 0xdd50, 0x4852, { 0x83, 0xa3, 0x34, 0x4c, 0x50, 0xd9, 0x3b, 0x17 } }
-
-
-
- NTDDI_VERSION=0x06010000;_WIN32_WINNT=0x0601;MyProductName=$(MyProductName);MyProductFileName=$(MyProductFileName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas);MyFullVersion=$(MyFullVersion);MyFspFsctlDeviceClassGuid=$(MyFspFsctlDeviceClassGuid);MyFspFsvrtDeviceClassGuid=$(MyFspFsvrtDeviceClassGuid)
-
-
- MyProductName=$(MyProductName);MyProductFileName=$(MyProductFileName);MyDescription=$(MyDescription);MyCompanyName=$(MyCompanyName);MyCopyright=$(MyCopyright);MyProductVersion=$(MyProductVersion);MyProductStage=$(MyProductStage);MyVersion=$(MyVersion);MyVersionWithCommas=$(MyVersionWithCommas);MyFullVersion=$(MyFullVersion);MyFspFsctlDeviceClassGuid=$(MyFspFsctlDeviceClassGuid);MyFspFsvrtDeviceClassGuid=$(MyFspFsvrtDeviceClassGuid)
-
-
-
-
- 4996
-
-
-
-
- true
-
-
-
-
- DebugFull
-
-
-
- false
-
\ No newline at end of file
diff --git a/build/VStudio/winfsp.sln b/build/VStudio/winfsp.sln
index 288f222c..6ab3735d 100644
--- a/build/VStudio/winfsp.sln
+++ b/build/VStudio/winfsp.sln
@@ -60,168 +60,250 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fsptool", "tools\fsptool.vc
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
+ Installer.Debug|ARM64 = Installer.Debug|ARM64
Installer.Debug|x64 = Installer.Debug|x64
Installer.Debug|x86 = Installer.Debug|x86
+ Installer.Release|ARM64 = Installer.Release|ARM64
Installer.Release|x64 = Installer.Release|x64
Installer.Release|x86 = Installer.Release|x86
+ Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|ARM64.Build.0 = Debug|ARM64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x64.ActiveCfg = Debug|x64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x64.Build.0 = Debug|x64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x86.ActiveCfg = Debug|Win32
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Debug|x86.Build.0 = Debug|Win32
+ {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Debug|x64.ActiveCfg = Debug|x64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Debug|x86.ActiveCfg = Debug|Win32
+ {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Release|x64.ActiveCfg = Release|x64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Installer.Release|x86.ActiveCfg = Release|Win32
+ {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|ARM64.ActiveCfg = Release|ARM64
+ {4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|ARM64.Build.0 = Release|ARM64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x64.ActiveCfg = Release|x64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x64.Build.0 = Release|x64
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x86.ActiveCfg = Release|Win32
{4A7C0B21-9E10-4C81-92DE-1493EFCF24EB}.Release|x86.Build.0 = Release|Win32
+ {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|ARM64.Build.0 = Debug|ARM64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x64.ActiveCfg = Debug|x64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x64.Build.0 = Debug|x64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x86.ActiveCfg = Debug|Win32
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Debug|x86.Build.0 = Debug|Win32
+ {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Debug|x64.ActiveCfg = Debug|x64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Debug|x86.ActiveCfg = Debug|Win32
+ {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Release|x64.ActiveCfg = Release|x64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Installer.Release|x86.ActiveCfg = Release|Win32
+ {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|ARM64.ActiveCfg = Release|ARM64
+ {C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|ARM64.Build.0 = Release|ARM64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x64.ActiveCfg = Release|x64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x64.Build.0 = Release|x64
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x86.ActiveCfg = Release|Win32
{C85C26BA-8C22-4D30-83DA-46C3548E6332}.Release|x86.Build.0 = Release|Win32
+ {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|ARM64.Build.0 = Debug|ARM64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x64.ActiveCfg = Debug|x64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x64.Build.0 = Debug|x64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x86.ActiveCfg = Debug|Win32
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Debug|x86.Build.0 = Debug|Win32
+ {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Debug|x64.ActiveCfg = Debug|x64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Debug|x86.ActiveCfg = Debug|Win32
+ {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Release|x64.ActiveCfg = Release|x64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Installer.Release|x86.ActiveCfg = Release|Win32
+ {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|ARM64.ActiveCfg = Release|ARM64
+ {262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|ARM64.Build.0 = Release|ARM64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x64.ActiveCfg = Release|x64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x64.Build.0 = Release|x64
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x86.ActiveCfg = Release|Win32
{262DF8CC-E7A8-4460-A22C-683CBA322C32}.Release|x86.Build.0 = Release|Win32
+ {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|ARM64.Build.0 = Debug|ARM64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x64.ActiveCfg = Debug|x64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x64.Build.0 = Debug|x64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x86.ActiveCfg = Debug|Win32
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Debug|x86.Build.0 = Debug|Win32
+ {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Debug|x64.ActiveCfg = Debug|x64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Debug|x86.ActiveCfg = Debug|Win32
+ {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Release|x64.ActiveCfg = Release|x64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Installer.Release|x86.ActiveCfg = Release|Win32
+ {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|ARM64.ActiveCfg = Release|ARM64
+ {AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|ARM64.Build.0 = Release|ARM64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x64.ActiveCfg = Release|x64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x64.Build.0 = Release|x64
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x86.ActiveCfg = Release|Win32
{AA7190E8-877F-4827-8CDD-E0D85F83C8C1}.Release|x86.Build.0 = Release|Win32
+ {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Debug|ARM64.ActiveCfg = Debug|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Debug|x64.ActiveCfg = Debug|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Debug|x86.ActiveCfg = Debug|x86
+ {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|ARM64.ActiveCfg = Release|x86
+ {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|ARM64.Build.0 = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x64.ActiveCfg = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x64.Build.0 = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x86.ActiveCfg = Debug|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Debug|x86.Build.0 = Debug|x86
+ {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|ARM64.ActiveCfg = Release|x86
+ {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|ARM64.Build.0 = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x64.ActiveCfg = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x64.Build.0 = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x86.ActiveCfg = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Installer.Release|x86.Build.0 = Release|x86
+ {D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Release|ARM64.ActiveCfg = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Release|x64.ActiveCfg = Release|x86
{D53AAC39-4C57-4CA5-A4F3-C2B24888C594}.Release|x86.ActiveCfg = Release|x86
+ {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Debug|ARM64.ActiveCfg = Debug|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Debug|x64.ActiveCfg = Debug|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Debug|x86.ActiveCfg = Debug|Win32
+ {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|ARM64.ActiveCfg = Debug|Win32
+ {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|ARM64.Build.0 = Debug|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x64.ActiveCfg = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x64.Build.0 = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x86.ActiveCfg = Debug|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Debug|x86.Build.0 = Debug|Win32
+ {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|ARM64.ActiveCfg = Release|Win32
+ {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|ARM64.Build.0 = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x64.ActiveCfg = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x64.Build.0 = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x86.ActiveCfg = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Installer.Release|x86.Build.0 = Release|Win32
+ {95C223E6-B5F1-4FD0-9376-41CDBC824445}.Release|ARM64.ActiveCfg = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Release|x64.ActiveCfg = Release|Win32
{95C223E6-B5F1-4FD0-9376-41CDBC824445}.Release|x86.ActiveCfg = Release|Win32
+ {10757011-749D-4954-873B-AE38D8145472}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {10757011-749D-4954-873B-AE38D8145472}.Debug|ARM64.Build.0 = Debug|ARM64
{10757011-749D-4954-873B-AE38D8145472}.Debug|x64.ActiveCfg = Debug|x64
{10757011-749D-4954-873B-AE38D8145472}.Debug|x64.Build.0 = Debug|x64
{10757011-749D-4954-873B-AE38D8145472}.Debug|x86.ActiveCfg = Debug|Win32
{10757011-749D-4954-873B-AE38D8145472}.Debug|x86.Build.0 = Debug|Win32
+ {10757011-749D-4954-873B-AE38D8145472}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{10757011-749D-4954-873B-AE38D8145472}.Installer.Debug|x64.ActiveCfg = Debug|x64
{10757011-749D-4954-873B-AE38D8145472}.Installer.Debug|x86.ActiveCfg = Debug|Win32
+ {10757011-749D-4954-873B-AE38D8145472}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{10757011-749D-4954-873B-AE38D8145472}.Installer.Release|x64.ActiveCfg = Release|x64
{10757011-749D-4954-873B-AE38D8145472}.Installer.Release|x86.ActiveCfg = Release|Win32
+ {10757011-749D-4954-873B-AE38D8145472}.Release|ARM64.ActiveCfg = Release|ARM64
+ {10757011-749D-4954-873B-AE38D8145472}.Release|ARM64.Build.0 = Release|ARM64
{10757011-749D-4954-873B-AE38D8145472}.Release|x64.ActiveCfg = Release|x64
{10757011-749D-4954-873B-AE38D8145472}.Release|x64.Build.0 = Release|x64
{10757011-749D-4954-873B-AE38D8145472}.Release|x86.ActiveCfg = Release|Win32
{10757011-749D-4954-873B-AE38D8145472}.Release|x86.Build.0 = Release|Win32
+ {C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|ARM64.Build.0 = Debug|ARM64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|x64.ActiveCfg = Debug|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|x64.Build.0 = Debug|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|x86.ActiveCfg = Debug|Win32
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Debug|x86.Build.0 = Debug|Win32
+ {C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Debug|x64.ActiveCfg = Debug|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Debug|x86.ActiveCfg = Debug|Win32
+ {C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Release|x64.ActiveCfg = Release|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Installer.Release|x86.ActiveCfg = Release|Win32
+ {C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|ARM64.ActiveCfg = Release|ARM64
+ {C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|ARM64.Build.0 = Release|ARM64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|x64.ActiveCfg = Release|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|x64.Build.0 = Release|x64
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|x86.ActiveCfg = Release|Win32
{C4E1E9E5-0959-488E-8C6A-C327CC81BEFB}.Release|x86.Build.0 = Release|Win32
+ {94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|ARM64.Build.0 = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|x64.ActiveCfg = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|x64.Build.0 = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|x86.ActiveCfg = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Debug|x86.Build.0 = Debug|Any CPU
+ {94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Debug|ARM64.ActiveCfg = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Debug|x64.ActiveCfg = Debug|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Debug|x86.ActiveCfg = Debug|Any CPU
+ {94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Release|ARM64.ActiveCfg = Release|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Release|x64.ActiveCfg = Release|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Installer.Release|x86.ActiveCfg = Release|Any CPU
+ {94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|ARM64.Build.0 = Release|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|x64.ActiveCfg = Release|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|x64.Build.0 = Release|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|x86.ActiveCfg = Release|Any CPU
{94580219-CC8D-4FE5-A3BE-437B0B3481E1}.Release|x86.Build.0 = Release|Any CPU
+ {4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|ARM64.Build.0 = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|x64.ActiveCfg = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|x64.Build.0 = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|x86.ActiveCfg = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Debug|x86.Build.0 = Debug|Any CPU
+ {4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Debug|ARM64.ActiveCfg = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Debug|x64.ActiveCfg = Debug|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Debug|x86.ActiveCfg = Debug|Any CPU
+ {4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Release|ARM64.ActiveCfg = Release|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Release|x64.ActiveCfg = Release|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Installer.Release|x86.ActiveCfg = Release|Any CPU
+ {4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|ARM64.Build.0 = Release|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|x64.ActiveCfg = Release|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|x64.Build.0 = Release|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|x86.ActiveCfg = Release|Any CPU
{4920E350-D496-4652-AE98-6C4208AEC1D8}.Release|x86.Build.0 = Release|Any CPU
+ {6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|ARM64.Build.0 = Debug|ARM64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|x64.ActiveCfg = Debug|x64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|x64.Build.0 = Debug|x64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|x86.ActiveCfg = Debug|Win32
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Debug|x86.Build.0 = Debug|Win32
+ {6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Debug|x64.ActiveCfg = Debug|x64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Debug|x86.ActiveCfg = Debug|Win32
+ {6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Release|x64.ActiveCfg = Release|x64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Installer.Release|x86.ActiveCfg = Release|Win32
+ {6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|ARM64.ActiveCfg = Release|ARM64
+ {6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|ARM64.Build.0 = Release|ARM64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|x64.ActiveCfg = Release|x64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|x64.Build.0 = Release|x64
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|x86.ActiveCfg = Release|Win32
{6CDF9411-B852-4EAC-822D-8F930675F17B}.Release|x86.Build.0 = Release|Win32
+ {264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|ARM64.Build.0 = Debug|ARM64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|x64.ActiveCfg = Debug|x64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|x64.Build.0 = Debug|x64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|x86.ActiveCfg = Debug|Win32
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Debug|x86.Build.0 = Debug|Win32
+ {264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Debug|x64.ActiveCfg = Debug|x64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Debug|x86.ActiveCfg = Debug|Win32
+ {264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Release|x64.ActiveCfg = Release|x64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Installer.Release|x86.ActiveCfg = Release|Win32
+ {264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|ARM64.ActiveCfg = Release|ARM64
+ {264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|ARM64.Build.0 = Release|ARM64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|x64.ActiveCfg = Release|x64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|x64.Build.0 = Release|x64
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|x86.ActiveCfg = Release|Win32
{264A5D09-126F-4760-A3F1-4B3B95C925AA}.Release|x86.Build.0 = Release|Win32
+ {1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|ARM64.Build.0 = Debug|ARM64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|x64.ActiveCfg = Debug|x64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|x64.Build.0 = Debug|x64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|x86.ActiveCfg = Debug|Win32
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Debug|x86.Build.0 = Debug|Win32
+ {1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Debug|ARM64.ActiveCfg = Debug|ARM64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Debug|x64.ActiveCfg = Debug|x64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Debug|x86.ActiveCfg = Debug|Win32
+ {1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Release|ARM64.ActiveCfg = Release|ARM64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Release|x64.ActiveCfg = Release|x64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Installer.Release|x86.ActiveCfg = Release|Win32
+ {1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|ARM64.ActiveCfg = Release|ARM64
+ {1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|ARM64.Build.0 = Release|ARM64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|x64.ActiveCfg = Release|x64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|x64.Build.0 = Release|x64
{1E997BEC-1642-4A5C-B252-852DA094E11E}.Release|x86.ActiveCfg = Release|Win32
diff --git a/build/VStudio/winfsp_dll.vcxproj b/build/VStudio/winfsp_dll.vcxproj
index cbd12cfd..3148b26a 100644
--- a/build/VStudio/winfsp_dll.vcxproj
+++ b/build/VStudio/winfsp_dll.vcxproj
@@ -1,11 +1,19 @@
-
+
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -71,49 +79,69 @@
Document
- echo arch=$(PlatformTarget) >$(OutDir)fuse-$(PlatformTarget).pc
-copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(PlatformTarget).pc >nul
- Writing fuse-$(PlatformTarget).pc
- $(OutDir)fuse-$(PlatformTarget).pc
+ echo arch=$(MyProductFileArch) >$(OutDir)fuse-$(MyProductFileArch).pc
+copy /b $(OutDir)fuse-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse-$(MyProductFileArch).pc >nul
+ Writing fuse-$(MyProductFileArch).pc
+ $(OutDir)fuse-$(MyProductFileArch).pc
false
- echo arch=$(PlatformTarget) >$(OutDir)fuse-$(PlatformTarget).pc
-copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(PlatformTarget).pc >nul
- Writing fuse-$(PlatformTarget).pc
- $(OutDir)fuse-$(PlatformTarget).pc
+ echo arch=$(MyProductFileArch) >$(OutDir)fuse-$(MyProductFileArch).pc
+copy /b $(OutDir)fuse-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse-$(MyProductFileArch).pc >nul
+ Writing fuse-$(MyProductFileArch).pc
+ $(OutDir)fuse-$(MyProductFileArch).pc
false
- echo arch=$(PlatformTarget) >$(OutDir)fuse-$(PlatformTarget).pc
-copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(PlatformTarget).pc >nul
- Writing fuse-$(PlatformTarget).pc
- $(OutDir)fuse-$(PlatformTarget).pc
+ echo arch=$(MyProductFileArch) >$(OutDir)fuse-$(MyProductFileArch).pc
+copy /b $(OutDir)fuse-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse-$(MyProductFileArch).pc >nul
+ echo arch=$(MyProductFileArch) >$(OutDir)fuse-$(MyProductFileArch).pc
+copy /b $(OutDir)fuse-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse-$(MyProductFileArch).pc >nul
+ Writing fuse-$(MyProductFileArch).pc
+ Writing fuse-$(MyProductFileArch).pc
+ $(OutDir)fuse-$(MyProductFileArch).pc
+ $(OutDir)fuse-$(MyProductFileArch).pc
false
- echo arch=$(PlatformTarget) >$(OutDir)fuse-$(PlatformTarget).pc
-copy /b $(OutDir)fuse-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse-$(PlatformTarget).pc >nul
- Writing fuse-$(PlatformTarget).pc
- $(OutDir)fuse-$(PlatformTarget).pc
+ false
+ echo arch=$(MyProductFileArch) >$(OutDir)fuse-$(MyProductFileArch).pc
+copy /b $(OutDir)fuse-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse-$(MyProductFileArch).pc >nul
+ echo arch=$(MyProductFileArch) >$(OutDir)fuse-$(MyProductFileArch).pc
+copy /b $(OutDir)fuse-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse-$(MyProductFileArch).pc >nul
+ Writing fuse-$(MyProductFileArch).pc
+ Writing fuse-$(MyProductFileArch).pc
+ $(OutDir)fuse-$(MyProductFileArch).pc
+ $(OutDir)fuse-$(MyProductFileArch).pc
false
+ false
Document
- echo arch=$(PlatformTarget) >$(OutDir)fuse3-$(PlatformTarget).pc
-copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(PlatformTarget).pc >nul
- echo arch=$(PlatformTarget) >$(OutDir)fuse3-$(PlatformTarget).pc
-copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(PlatformTarget).pc >nul
- echo arch=$(PlatformTarget) >$(OutDir)fuse3-$(PlatformTarget).pc
-copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(PlatformTarget).pc >nul
- echo arch=$(PlatformTarget) >$(OutDir)fuse3-$(PlatformTarget).pc
-copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(PlatformTarget).pc >nul
- Writing fuse3-$(PlatformTarget).pc
- Writing fuse3-$(PlatformTarget).pc
- Writing fuse3-$(PlatformTarget).pc
- Writing fuse3-$(PlatformTarget).pc
- $(OutDir)fuse3-$(PlatformTarget).pc
- $(OutDir)fuse3-$(PlatformTarget).pc
- $(OutDir)fuse3-$(PlatformTarget).pc
- $(OutDir)fuse3-$(PlatformTarget).pc
+ echo arch=$(MyProductFileArch) >$(OutDir)fuse3-$(MyProductFileArch).pc
+copy /b $(OutDir)fuse3-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse3-$(MyProductFileArch).pc >nul
+ echo arch=$(MyProductFileArch) >$(OutDir)fuse3-$(MyProductFileArch).pc
+copy /b $(OutDir)fuse3-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse3-$(MyProductFileArch).pc >nul
+ echo arch=$(MyProductFileArch) >$(OutDir)fuse3-$(MyProductFileArch).pc
+copy /b $(OutDir)fuse3-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse3-$(MyProductFileArch).pc >nul
+ echo arch=$(MyProductFileArch) >$(OutDir)fuse3-$(MyProductFileArch).pc
+copy /b $(OutDir)fuse3-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse3-$(MyProductFileArch).pc >nul
+ echo arch=$(MyProductFileArch) >$(OutDir)fuse3-$(MyProductFileArch).pc
+copy /b $(OutDir)fuse3-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse3-$(MyProductFileArch).pc >nul
+ echo arch=$(MyProductFileArch) >$(OutDir)fuse3-$(MyProductFileArch).pc
+copy /b $(OutDir)fuse3-$(MyProductFileArch).pc + %(FullPath) $(OutDir)fuse3-$(MyProductFileArch).pc >nul
+ Writing fuse3-$(MyProductFileArch).pc
+ Writing fuse3-$(MyProductFileArch).pc
+ Writing fuse3-$(MyProductFileArch).pc
+ Writing fuse3-$(MyProductFileArch).pc
+ Writing fuse3-$(MyProductFileArch).pc
+ Writing fuse3-$(MyProductFileArch).pc
+ $(OutDir)fuse3-$(MyProductFileArch).pc
+ $(OutDir)fuse3-$(MyProductFileArch).pc
+ $(OutDir)fuse3-$(MyProductFileArch).pc
+ $(OutDir)fuse3-$(MyProductFileArch).pc
+ $(OutDir)fuse3-$(MyProductFileArch).pc
+ $(OutDir)fuse3-$(MyProductFileArch).pc
false
false
false
+ false
false
+ false
@@ -123,7 +151,9 @@ copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(Platf
_UNICODE;UNICODE;%(PreprocessorDefinitions)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
+ _UNICODE;UNICODE;%(PreprocessorDefinitions)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
+ _UNICODE;UNICODE;%(PreprocessorDefinitions)
@@ -153,6 +183,12 @@ copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(Platf
$(DefaultPlatformToolset)
Unicode
+
+ DynamicLibrary
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
DynamicLibrary
false
@@ -160,6 +196,13 @@ copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(Platf
true
Unicode
+
+ DynamicLibrary
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -174,33 +217,51 @@ copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(Platf
+
+
+
+
+
+
true
+ $(MyProductFileName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(MyProductFileName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
true
+ $(MyProductFileName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(MyProductFileName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ true
+ $(MyProductFileName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(MyProductFileName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(MyProductFileName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
false
+ $(MyProductFileName)-$(MyProductFileArch)
$(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(MyProductFileName)-$(PlatformTarget)
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ false
+ $(MyProductFileName)-$(MyProductFileArch)
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
@@ -256,6 +317,33 @@ copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(Platf
$(OutDir)$(TargetFileName).public.pdb
+
+
+
+
+ Level3
+ Disabled
+ _DEBUG;_WINDOWS;_USRDLL;WINFSPDLL_EXPORTS;%(PreprocessorDefinitions)
+
+
+ ..\..\src;..\..\inc
+ MultiThreaded
+ Default
+ false
+
+
+
+
+ Windows
+ $(OutDir)$(TargetFileName).pdb
+ true
+ $(OutDir)$(TargetFileName).map
+ true
+ ..\..\src\dll\library.def
+ %(AdditionalDependencies);rpcrt4.lib;credui.lib;secur32.lib;version.lib;netapi32.lib;wldap32.lib
+ $(OutDir)$(TargetFileName).public.pdb
+
+
Level3
@@ -318,6 +406,37 @@ copy /b $(OutDir)fuse3-$(PlatformTarget).pc + %(FullPath) $(OutDir)fuse3-$(Platf
/PDBALTPATH:$(TargetFileName).pdb %(AdditionalOptions)
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;_WINDOWS;_USRDLL;WINFSPDLL_EXPORTS;%(PreprocessorDefinitions)
+
+
+ ..\..\src;..\..\inc
+ MultiThreaded
+ false
+
+
+
+
+ Windows
+ true
+ true
+ $(OutDir)$(TargetFileName).pdb
+ true
+ $(OutDir)$(TargetFileName).map
+ true
+ ..\..\src\dll\library.def
+ %(AdditionalDependencies);rpcrt4.lib;credui.lib;secur32.lib;version.lib;netapi32.lib;wldap32.lib
+ $(OutDir)$(TargetFileName).public.pdb
+ /PDBALTPATH:$(TargetFileName).pdb %(AdditionalOptions)
+
+
diff --git a/build/VStudio/winfsp_sys.vcxproj b/build/VStudio/winfsp_sys.vcxproj
index c681fbe4..3092efa0 100644
--- a/build/VStudio/winfsp_sys.vcxproj
+++ b/build/VStudio/winfsp_sys.vcxproj
@@ -1,11 +1,19 @@
-
+
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -55,6 +63,14 @@
Driver
WDM
+
+ Windows10
+ true
+ $(DDK_LIB_PATH)\BufferOverflowFastFailK.lib
+ WindowsKernelModeDriver10.0
+ Driver
+ WDM
+
Windows10
false
@@ -63,6 +79,14 @@
Driver
WDM
+
+ Windows10
+ false
+ $(DDK_LIB_PATH)\BufferOverflowFastFailK.lib
+ WindowsKernelModeDriver10.0
+ Driver
+ WDM
+
@@ -73,31 +97,45 @@
DbgengKernelDebugger
- $(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(MyProductFileName)-$(PlatformTarget)
+ $(MyProductFileName)-$(MyProductFileArch)
false
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
DbgengKernelDebugger
- $(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(MyProductFileName)-$(PlatformTarget)
+ $(MyProductFileName)-$(MyProductFileArch)
false
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
DbgengKernelDebugger
- $(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(MyProductFileName)-$(PlatformTarget)
+ $(MyProductFileName)-$(MyProductFileArch)
false
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ DbgengKernelDebugger
+ $(MyProductFileName)-$(MyProductFileArch)
+ false
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
DbgengKernelDebugger
- $(SolutionDir)build\$(Configuration)\
- $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
- $(MyProductFileName)-$(PlatformTarget)
+ $(MyProductFileName)-$(MyProductFileArch)
false
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
+
+
+ DbgengKernelDebugger
+ $(MyProductFileName)-$(MyProductFileArch)
+ false
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(MyProductFileArch)\
@@ -142,6 +180,20 @@
$(OutDir)$(TargetName)$(TargetExt).lib
+
+
+ ..\..\src;..\..\opt\fsext\inc;..\..\inc;%(AdditionalIncludeDirectories)
+ _WIN64;_ARM64_;ARM64;%(PreprocessorDefinitions)
+
+
+ cng.lib;wdmsec.lib;%(AdditionalDependencies)
+ true
+ $(OutDir)$(TargetFileName).pdb
+ $(OutDir)$(TargetFileName).map
+ $(OutDir)$(TargetFileName).public.pdb
+ $(OutDir)$(TargetName)$(TargetExt).lib
+
+
..\..\src;..\..\opt\fsext\inc;..\..\inc;%(AdditionalIncludeDirectories)
@@ -157,6 +209,21 @@
$(OutDir)$(TargetName)$(TargetExt).lib
+
+
+ ..\..\src;..\..\opt\fsext\inc;..\..\inc;%(AdditionalIncludeDirectories)
+ _WIN64;_ARM64_;ARM64;%(PreprocessorDefinitions)
+
+
+ cng.lib;wdmsec.lib;%(AdditionalDependencies)
+ true
+ $(OutDir)$(TargetFileName).pdb
+ $(OutDir)$(TargetFileName).map
+ $(OutDir)$(TargetFileName).public.pdb
+ /PDBALTPATH:$(TargetFileName).pdb %(AdditionalOptions)
+ $(OutDir)$(TargetName)$(TargetExt).lib
+
+
@@ -180,6 +247,7 @@
+
@@ -210,7 +278,9 @@
_X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions)
_X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions)
_WIN64;_AMD64_=1;AMD64;%(PreprocessorDefinitions)
+ _WIN64;_ARM64_=1;ARM64;%(PreprocessorDefinitions)
_WIN64;_AMD64_=1;AMD64;%(PreprocessorDefinitions)
+ _WIN64;_ARM64_=1;ARM64;%(PreprocessorDefinitions)
@@ -218,64 +288,94 @@
Document
set DriverFile=$(TargetFileName)
set Provider="$(MyCompanyName)"
-set CatalogFile=driver-$(PlatformTarget).cat
+set CatalogFile=driver-$(MyProductFileArch).cat
setlocal EnableDelayedExpansion
-if exist $(OutDir)driver-$(PlatformTarget).inf del $(OutDir)driver-$(PlatformTarget).inf
+if exist $(OutDir)driver-$(MyProductFileArch).inf del $(OutDir)driver-$(MyProductFileArch).inf
for /f "delims=" %%l in (%(FullPath)) do (
set line=%%l
- echo !line! >>$(OutDir)driver-$(PlatformTarget).inf
+ echo !line! >>$(OutDir)driver-$(MyProductFileArch).inf
)
-stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(PlatformTarget).inf
+stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(MyProductFileArch).inf
false
set DriverFile=$(TargetFileName)
set Provider="$(MyCompanyName)"
-set CatalogFile=driver-$(PlatformTarget).cat
+set CatalogFile=driver-$(MyProductFileArch).cat
setlocal EnableDelayedExpansion
-if exist $(OutDir)driver-$(PlatformTarget).inf del $(OutDir)driver-$(PlatformTarget).inf
+if exist $(OutDir)driver-$(MyProductFileArch).inf del $(OutDir)driver-$(MyProductFileArch).inf
for /f "delims=" %%l in (%(FullPath)) do (
set line=%%l
- echo !line! >>$(OutDir)driver-$(PlatformTarget).inf
+ echo !line! >>$(OutDir)driver-$(MyProductFileArch).inf
)
-stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(PlatformTarget).inf
+stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(MyProductFileArch).inf
false
set DriverFile=$(TargetFileName)
set Provider="$(MyCompanyName)"
-set CatalogFile=driver-$(PlatformTarget).cat
+set CatalogFile=driver-$(MyProductFileArch).cat
setlocal EnableDelayedExpansion
-if exist $(OutDir)driver-$(PlatformTarget).inf del $(OutDir)driver-$(PlatformTarget).inf
+if exist $(OutDir)driver-$(MyProductFileArch).inf del $(OutDir)driver-$(MyProductFileArch).inf
for /f "delims=" %%l in (%(FullPath)) do (
set line=%%l
- echo !line! >>$(OutDir)driver-$(PlatformTarget).inf
+ echo !line! >>$(OutDir)driver-$(MyProductFileArch).inf
)
-stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(PlatformTarget).inf
+stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(MyProductFileArch).inf
+ set DriverFile=$(TargetFileName)
+set Provider="$(MyCompanyName)"
+set CatalogFile=driver-$(MyProductFileArch).cat
+
+setlocal EnableDelayedExpansion
+if exist $(OutDir)driver-$(MyProductFileArch).inf del $(OutDir)driver-$(MyProductFileArch).inf
+for /f "delims=" %%l in (%(FullPath)) do (
+ set line=%%l
+ echo !line! >>$(OutDir)driver-$(MyProductFileArch).inf
+)
+
+stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(MyProductFileArch).inf
false
+ false
set DriverFile=$(TargetFileName)
set Provider="$(MyCompanyName)"
-set CatalogFile=driver-$(PlatformTarget).cat
+set CatalogFile=driver-$(MyProductFileArch).cat
setlocal EnableDelayedExpansion
-if exist $(OutDir)driver-$(PlatformTarget).inf del $(OutDir)driver-$(PlatformTarget).inf
+if exist $(OutDir)driver-$(MyProductFileArch).inf del $(OutDir)driver-$(MyProductFileArch).inf
for /f "delims=" %%l in (%(FullPath)) do (
set line=%%l
- echo !line! >>$(OutDir)driver-$(PlatformTarget).inf
+ echo !line! >>$(OutDir)driver-$(MyProductFileArch).inf
)
-stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(PlatformTarget).inf
+stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(MyProductFileArch).inf
+ set DriverFile=$(TargetFileName)
+set Provider="$(MyCompanyName)"
+set CatalogFile=driver-$(MyProductFileArch).cat
+
+setlocal EnableDelayedExpansion
+if exist $(OutDir)driver-$(MyProductFileArch).inf del $(OutDir)driver-$(MyProductFileArch).inf
+for /f "delims=" %%l in (%(FullPath)) do (
+ set line=%%l
+ echo !line! >>$(OutDir)driver-$(MyProductFileArch).inf
+)
+
+stampinf -d * -v $(MyVersion) -f $(OutDir)driver-$(MyProductFileArch).inf
false
- Writing driver-$(PlatformTarget).inf
- $(OutDir)driver-$(PlatformTarget).inf
- Writing driver-$(PlatformTarget).inf
- $(OutDir)driver-$(PlatformTarget).inf
- Writing driver-$(PlatformTarget).inf
- $(OutDir)driver-$(PlatformTarget).inf
- Writing driver-$(PlatformTarget).inf
- $(OutDir)driver-$(PlatformTarget).inf
+ false
+ Writing driver-$(MyProductFileArch).inf
+ $(OutDir)driver-$(MyProductFileArch).inf
+ Writing driver-$(MyProductFileArch).inf
+ $(OutDir)driver-$(MyProductFileArch).inf
+ Writing driver-$(MyProductFileArch).inf
+ Writing driver-$(MyProductFileArch).inf
+ $(OutDir)driver-$(MyProductFileArch).inf
+ $(OutDir)driver-$(MyProductFileArch).inf
+ Writing driver-$(MyProductFileArch).inf
+ Writing driver-$(MyProductFileArch).inf
+ $(OutDir)driver-$(MyProductFileArch).inf
+ $(OutDir)driver-$(MyProductFileArch).inf
diff --git a/build/VStudio/winfsp_sys.vcxproj.filters b/build/VStudio/winfsp_sys.vcxproj.filters
index 7c248ca6..a23ea4f0 100644
--- a/build/VStudio/winfsp_sys.vcxproj.filters
+++ b/build/VStudio/winfsp_sys.vcxproj.filters
@@ -128,6 +128,9 @@
Source
+
+ Source
+
diff --git a/doc/WinFsp-on-ARM64.asciidoc b/doc/WinFsp-on-ARM64.asciidoc
new file mode 100644
index 00000000..56fee125
--- /dev/null
+++ b/doc/WinFsp-on-ARM64.asciidoc
@@ -0,0 +1,39 @@
+= WinFsp on ARM64
+
+This document summarizes the changes made to WinFsp to support Windows on ARM64. With these changes WinFsp runs natively in the ARM64 environment, while maintaining backwards compatibility.
+
+== Build System
+
+* Visual Studio 2019 or later is required to build WinFsp. Visual Studio 2015 builds are no longer possible because of lack of ARM64 support.
+** The script `tools\gensrc\remove-build-arm64.bat` can be used to remove the ARM64 configuration from the project files. This allows WinFsp to be built with Visual Studio 2015, but without ARM64 support. This is a hack to support AppVeyor builds on Server 2012 images that have only Visual Studio 2015 installed.
+* Build configuration is now done by the file `build.common.props` located in `build\VStudio`.
+* Product configuration (`MyProductName`, etc.) is still done by the file `version.properties` located in `build\VStudio`. Non-product configuration portions of the file have migrated to `build.common.props`, which includes `version.properties`.
+* Project files under `build\VStudio` have been updated to support ARM64 builds.
+
+== Include Files
+
+* The macros `FSP_FSCTL_PRODUCT_FULL_REGKEY` and `FSP_FSCTL_PRODUCT_FILE_ARCH` have been added to header file `inc\winfsp\fsctl.h`:
+** `FSP_FSCTL_PRODUCT_FULL_REGKEY`: The full registry path for WinFsp.
+** `FSP_FSCTL_PRODUCT_FILE_ARCH`: The expected computer architecture suffix to use for file names (`a64` for ARM64, `x64` for x64, `x86` for x86).
+
+== File System Driver
+
+* The `IoInitializeTimer`, `IoStartTimer` and `IoStopTimer` DDI's are missing from Windows on ARM64 (https://social.msdn.microsoft.com/Forums/en-US/e1f4dbbd-a3f1-40a4-8f8b-e12a04b1b074/is-iostarttimer-universal[link]). The same functionality is now implemented within WinFsp in file `src\sys\devtimer.c`
+
+== Samples
+
+* The sample project files have been updated to support ARM64 builds.
+
+== Installer
+
+* The installer has been retrofitted to support native installation on ARM64, x64 and x86 environments.
+* The installer remains a single MSI file that supports all architectures.
+** NOTE: The current technique for detecting OS architecture relies on reading the registry value `PROCESSOR_ARCHITECTURE` from key `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment`. This may be fragile and a better technique may be required.
+* Files are installed in `\Program Files (x86)\WinFsp` on ARM64 and x64 Windows and `\Program Files` on x86 Windows.
+* Registry settings are placed in `HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\WinFsp` on ARM64 and x64 Windows and `HKEY_LOCAL_MACHINE\SOFTWARE\WinFsp` on x86 Windows.
+* Files for all architectures are always installed regardless of OS architecture. For example, all of `winfsp-a64.dll`, `winfsp-x64.dll` and `winfsp-x86.dll` are found in the `bin` subdirectory on ARM64, x64 and x86 Windows.
+* WinFsp supports x86 file systems on x86 Windows, x86 and x64 file systems on x64 Windows and x86, x64 and ARM64 file systems on ARM64 Windows.
+
+== License
+
+* The special exception for FLOSS to GPLv3 has been updated to mention that linking to `winfsp-a64.dll` is also allowed.
diff --git a/inc/winfsp/fsctl.h b/inc/winfsp/fsctl.h
index 0eec0da7..9bd35a76 100644
--- a/inc/winfsp/fsctl.h
+++ b/inc/winfsp/fsctl.h
@@ -66,6 +66,22 @@ extern const __declspec(selectany) GUID FspFsvrtDeviceClassGuid =
{ 0xb48171c3, 0xdd50, 0x4852, { 0x83, 0xa3, 0x34, 0x4c, 0x50, 0xd9, 0x3b, 0x17 } };
#endif
+/* locations */
+#define FSP_FSCTL_PRODUCT_REGKEY "Software\\" FSP_FSCTL_PRODUCT_NAME
+#define FSP_FSCTL_PRODUCT_REGKEY_WOW64 KEY_WOW64_32KEY
+#if defined(_ARM64_)
+#define FSP_FSCTL_PRODUCT_FULL_REGKEY "Software\\WOW6432Node\\" FSP_FSCTL_PRODUCT_NAME
+#define FSP_FSCTL_PRODUCT_FILE_ARCH "a64"
+#elif defined(_AMD64_)
+#define FSP_FSCTL_PRODUCT_FULL_REGKEY "Software\\WOW6432Node\\" FSP_FSCTL_PRODUCT_NAME
+#define FSP_FSCTL_PRODUCT_FILE_ARCH "x64"
+#elif defined(_X86_)
+#define FSP_FSCTL_PRODUCT_FULL_REGKEY "Software\\" FSP_FSCTL_PRODUCT_NAME
+#define FSP_FSCTL_PRODUCT_FILE_ARCH "x86"
+#else
+#error unknown architecture
+#endif
+
/* alignment macros */
#define FSP_FSCTL_ALIGN_UP(x, s) (((x) + ((s) - 1L)) & ~((s) - 1L))
#define FSP_FSCTL_DEFAULT_ALIGNMENT 8
diff --git a/inc/winfsp/launch.h b/inc/winfsp/launch.h
index 0b29acac..44b50eef 100644
--- a/inc/winfsp/launch.h
+++ b/inc/winfsp/launch.h
@@ -32,8 +32,9 @@
extern "C" {
#endif
-#define FSP_LAUNCH_REGKEY "Software\\" FSP_FSCTL_PRODUCT_NAME "\\Services"
-#define FSP_LAUNCH_REGKEY_WOW64 KEY_WOW64_32KEY
+#define FSP_LAUNCH_REGKEY FSP_FSCTL_PRODUCT_REGKEY "\\Services"
+#define FSP_LAUNCH_REGKEY_WOW64 FSP_FSCTL_PRODUCT_REGKEY_WOW64
+#define FSP_LAUNCH_FULL_REGKEY FSP_FSCTL_PRODUCT_FULL_REGKEY "\\Services"
#define FSP_LAUNCH_PIPE_NAME "\\\\.\\pipe\\" FSP_FSCTL_PRODUCT_NAME ".{14E7137D-22B4-437A-B0C1-D21D1BDF3767}"
#define FSP_LAUNCH_PIPE_BUFFER_SIZE 4096
diff --git a/inc/winfsp/winfsp.h b/inc/winfsp/winfsp.h
index 00b4eb89..c72c7c31 100644
--- a/inc/winfsp/winfsp.h
+++ b/inc/winfsp/winfsp.h
@@ -2126,11 +2126,7 @@ FSP_API NTSTATUS FspVersion(PUINT32 PVersion);
static inline
NTSTATUS FspLoad(PVOID *PModule)
{
-#if defined(_WIN64)
-#define FSP_DLLNAME FSP_FSCTL_PRODUCT_FILE_NAME "-x64.dll"
-#else
-#define FSP_DLLNAME FSP_FSCTL_PRODUCT_FILE_NAME "-x86.dll"
-#endif
+#define FSP_DLLNAME FSP_FSCTL_PRODUCT_FILE_NAME "-" FSP_FSCTL_PRODUCT_FILE_ARCH ".dll"
#define FSP_DLLPATH "bin\\" FSP_DLLNAME
WINADVAPI
@@ -2147,7 +2143,6 @@ NTSTATUS FspLoad(PVOID *PModule)
WCHAR PathBuf[MAX_PATH];
DWORD Size;
- HKEY RegKey;
LONG Result;
HMODULE Module;
@@ -2157,15 +2152,9 @@ NTSTATUS FspLoad(PVOID *PModule)
Module = LoadLibraryW(L"" FSP_DLLNAME);
if (0 == Module)
{
- Result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\" FSP_FSCTL_PRODUCT_NAME,
- 0, KEY_READ | KEY_WOW64_32KEY, &RegKey);
- if (ERROR_SUCCESS == Result)
- {
- Size = sizeof PathBuf - sizeof L"" FSP_DLLPATH + sizeof(WCHAR);
- Result = RegGetValueW(RegKey, 0, L"InstallDir",
- RRF_RT_REG_SZ, 0, PathBuf, &Size);
- RegCloseKey(RegKey);
- }
+ Size = sizeof PathBuf - sizeof L"" FSP_DLLPATH + sizeof(WCHAR);
+ Result = RegGetValueW(HKEY_LOCAL_MACHINE, L"" FSP_FSCTL_PRODUCT_FULL_REGKEY, L"InstallDir",
+ RRF_RT_REG_SZ, 0, PathBuf, &Size);
if (ERROR_SUCCESS != Result)
return STATUS_OBJECT_NAME_NOT_FOUND;
@@ -2180,8 +2169,8 @@ NTSTATUS FspLoad(PVOID *PModule)
return STATUS_SUCCESS;
-#undef FSP_DLLNAME
#undef FSP_DLLPATH
+#undef FSP_DLLNAME
}
#ifdef __cplusplus
diff --git a/opt/fsext/lib/winfsp-a64.lib b/opt/fsext/lib/winfsp-a64.lib
new file mode 100644
index 00000000..776bbdf5
Binary files /dev/null and b/opt/fsext/lib/winfsp-a64.lib differ
diff --git a/src/dll/mount.c b/src/dll/mount.c
index 94dea8be..f6b60e6d 100644
--- a/src/dll/mount.c
+++ b/src/dll/mount.c
@@ -32,24 +32,17 @@ static BOOLEAN FspMountDoNotUseLauncher;
static VOID FspMountInitializeFromRegistry(VOID)
{
- HKEY RegKey;
- LONG Result;
- DWORD Size;
DWORD MountDoNotUseLauncher;
+ DWORD Size;
+ LONG Result;
MountDoNotUseLauncher = 0;
-
- Result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\" FSP_FSCTL_PRODUCT_NAME,
- 0, KEY_READ | KEY_WOW64_32KEY, &RegKey);
+ Size = sizeof MountDoNotUseLauncher;
+ Result = RegGetValueW(HKEY_LOCAL_MACHINE, L"" FSP_FSCTL_PRODUCT_FULL_REGKEY,
+ L"MountDoNotUseLauncher",
+ RRF_RT_REG_DWORD, 0, &MountDoNotUseLauncher, &Size);
if (ERROR_SUCCESS == Result)
- {
- Size = sizeof MountDoNotUseLauncher;
- Result = RegGetValueW(RegKey, 0, L"MountDoNotUseLauncher",
- RRF_RT_REG_DWORD, 0, &MountDoNotUseLauncher, &Size);
- RegCloseKey(RegKey);
- }
-
- FspMountDoNotUseLauncher = !!MountDoNotUseLauncher;
+ FspMountDoNotUseLauncher = !!MountDoNotUseLauncher;
}
static BOOL WINAPI FspMountInitialize(
diff --git a/src/dotnet/Interop.cs b/src/dotnet/Interop.cs
index 797d5b6a..8850a650 100644
--- a/src/dotnet/Interop.cs
+++ b/src/dotnet/Interop.cs
@@ -1433,18 +1433,30 @@ namespace Fsp.Interop
internal static String ProductFileName = "winfsp";
private static IntPtr LoadDll()
{
- String DllPath = null;
- String DllName = 8 == IntPtr.Size ?
- ProductFileName + "-x64.dll" :
- ProductFileName + "-x86.dll";
- String KeyName = 8 == IntPtr.Size ?
- "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\" + ProductName :
- "HKEY_LOCAL_MACHINE\\Software\\" + ProductName;
+ String RegPath, DllName, DllPath;
+ SYSTEM_INFO SystemInfo;
+ GetSystemInfo(out SystemInfo);
+ switch ((UInt32)SystemInfo.wProcessorArchitecture)
+ {
+ case SYSTEM_INFO.PROCESSOR_ARCHITECTURE_ARM64:
+ RegPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\" + ProductName;
+ DllName = ProductFileName + "-a64.dll";
+ break;
+ case SYSTEM_INFO.PROCESSOR_ARCHITECTURE_AMD64:
+ RegPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\" + ProductName;
+ DllName = ProductFileName + "-x64.dll";
+ break;
+ case SYSTEM_INFO.PROCESSOR_ARCHITECTURE_INTEL:
+ default:
+ RegPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\" + ProductName;
+ DllName = ProductFileName + "-x86.dll";
+ break;
+ }
IntPtr Module;
Module = LoadLibraryW(DllName);
if (IntPtr.Zero == Module)
{
- DllPath = Microsoft.Win32.Registry.GetValue(KeyName, "InstallDir", null) as String;
+ DllPath = Microsoft.Win32.Registry.GetValue(RegPath, "InstallDir", null) as String;
if (null != DllPath)
{
DllPath = Path.Combine(DllPath, Path.Combine("bin", DllName));
@@ -1546,6 +1558,39 @@ namespace Fsp.Interop
CheckVersion();
}
+ [StructLayout(LayoutKind.Sequential)]
+ private struct SYSTEM_INFO
+ {
+ internal const UInt32 PROCESSOR_ARCHITECTURE_INTEL = 0;
+ internal const UInt32 PROCESSOR_ARCHITECTURE_MIPS = 1;
+ internal const UInt32 PROCESSOR_ARCHITECTURE_ALPHA = 2;
+ internal const UInt32 PROCESSOR_ARCHITECTURE_PPC = 3;
+ internal const UInt32 PROCESSOR_ARCHITECTURE_SHX = 4;
+ internal const UInt32 PROCESSOR_ARCHITECTURE_ARM = 5;
+ internal const UInt32 PROCESSOR_ARCHITECTURE_IA64 = 6;
+ internal const UInt32 PROCESSOR_ARCHITECTURE_ALPHA64 = 7;
+ internal const UInt32 PROCESSOR_ARCHITECTURE_MSIL = 8;
+ internal const UInt32 PROCESSOR_ARCHITECTURE_AMD64 = 9;
+ internal const UInt32 PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 = 10;
+ internal const UInt32 PROCESSOR_ARCHITECTURE_NEUTRAL = 11;
+ internal const UInt32 PROCESSOR_ARCHITECTURE_ARM64 = 12;
+ internal const UInt32 PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64 = 13;
+ internal const UInt32 PROCESSOR_ARCHITECTURE_IA32_ON_ARM64 = 14;
+ internal const UInt32 PROCESSOR_ARCHITECTURE_UNKNOWN = 0xFFFF;
+
+ internal UInt16 wProcessorArchitecture;
+ internal UInt16 wReserved;
+ internal UInt32 dwPageSize;
+ internal IntPtr lpMinimumApplicationAddress;
+ internal IntPtr lpMaximumApplicationAddress;
+ internal IntPtr dwActiveProcessorMask;
+ internal UInt32 dwNumberOfProcessors;
+ internal UInt32 dwProcessorType;
+ internal UInt32 dwAllocationGranularity;
+ internal UInt16 wProcessorLevel;
+ internal UInt16 wProcessorRevision;
+ }
+
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall, SetLastError = true)]
private static extern IntPtr LoadLibraryW(
[MarshalAs(UnmanagedType.LPWStr)] String DllName);
@@ -1553,6 +1598,9 @@ namespace Fsp.Interop
private static extern IntPtr GetProcAddress(
IntPtr hModule,
[MarshalAs(UnmanagedType.LPStr)] String lpProcName);
+ [DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall, SetLastError = false)]
+ private static extern void GetSystemInfo(
+ out SYSTEM_INFO SystemInfo);
[DllImport("advapi32.dll", CallingConvention = CallingConvention.StdCall)]
private static extern UInt32 GetSecurityDescriptorLength(IntPtr SecurityDescriptor);
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall, SetLastError = true)]
diff --git a/src/shared/ku/posix.c b/src/shared/ku/posix.c
index 53fe7463..02f5fa2f 100644
--- a/src/shared/ku/posix.c
+++ b/src/shared/ku/posix.c
@@ -174,24 +174,17 @@ exit:
static VOID FspPosixInitializeFromRegistry(VOID)
{
- HKEY RegKey;
- LONG Result;
- DWORD Size;
DWORD DistinctPermsForSameOwnerGroup;
+ DWORD Size;
+ LONG Result;
DistinctPermsForSameOwnerGroup = 0;
-
- Result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\" FSP_FSCTL_PRODUCT_NAME,
- 0, KEY_READ | KEY_WOW64_32KEY, &RegKey);
+ Size = sizeof DistinctPermsForSameOwnerGroup;
+ Result = RegGetValueW(HKEY_LOCAL_MACHINE, L"" FSP_FSCTL_PRODUCT_FULL_REGKEY,
+ L"DistinctPermsForSameOwnerGroup",
+ RRF_RT_REG_DWORD, 0, &DistinctPermsForSameOwnerGroup, &Size);
if (ERROR_SUCCESS == Result)
- {
- Size = sizeof DistinctPermsForSameOwnerGroup;
- Result = RegGetValueW(RegKey, 0, L"DistinctPermsForSameOwnerGroup",
- RRF_RT_REG_DWORD, 0, &DistinctPermsForSameOwnerGroup, &Size);
- RegCloseKey(RegKey);
- }
-
- FspDistinctPermsForSameOwnerGroup = !!DistinctPermsForSameOwnerGroup;
+ FspDistinctPermsForSameOwnerGroup = !!DistinctPermsForSameOwnerGroup;
}
static BOOL WINAPI FspPosixInitialize(
diff --git a/src/sys/device.c b/src/sys/device.c
index f946b75b..f2685118 100644
--- a/src/sys/device.c
+++ b/src/sys/device.c
@@ -442,13 +442,13 @@ static NTSTATUS FspFsvolDeviceInit(PDEVICE_OBJECT DeviceObject)
/* initialize our timer routine and start our expiration timer */
#pragma prefast(suppress:28133, "We are a filesystem: we do not have AddDevice")
- Result = IoInitializeTimer(DeviceObject, FspFsvolDeviceTimerRoutine, 0);
+ Result = FspDeviceInitializeTimer(DeviceObject, FspFsvolDeviceTimerRoutine, 0);
if (!NT_SUCCESS(Result))
return Result;
KeInitializeSpinLock(&FsvolDeviceExtension->ExpirationLock);
ExInitializeWorkItem(&FsvolDeviceExtension->ExpirationWorkItem,
FspFsvolDeviceExpirationRoutine, DeviceObject);
- IoStartTimer(DeviceObject);
+ FspDeviceStartTimer(DeviceObject);
FsvolDeviceExtension->InitDoneTimer = 1;
/* initialize the volume information */
@@ -472,7 +472,7 @@ static VOID FspFsvolDeviceFini(PDEVICE_OBJECT DeviceObject)
* references our DeviceObject before queueing work items.
*/
if (FsvolDeviceExtension->InitDoneTimer)
- IoStopTimer(DeviceObject);
+ FspDeviceStopTimer(DeviceObject);
/* delete the file system statistics */
if (FsvolDeviceExtension->InitDoneStat)
diff --git a/src/sys/devtimer.c b/src/sys/devtimer.c
new file mode 100644
index 00000000..86cc6af9
--- /dev/null
+++ b/src/sys/devtimer.c
@@ -0,0 +1,124 @@
+/**
+ * @file sys/devtimer.c
+ *
+ * @copyright 2015-2021 Bill Zissimopoulos
+ */
+/*
+ * This file is part of WinFsp.
+ *
+ * You can redistribute it and/or modify it under the terms of the GNU
+ * General Public License version 3 as published by the Free Software
+ * Foundation.
+ *
+ * Licensees holding a valid commercial license may use this software
+ * in accordance with the commercial license agreement provided in
+ * conjunction with the software. The terms and conditions of any such
+ * commercial license agreement shall govern, supersede, and render
+ * ineffective any application of the GPLv3 license to this software,
+ * notwithstanding of any reference thereto in the software or
+ * associated repository.
+ */
+
+#include
+
+/*
+ * IoTimer Emulation.
+ *
+ * This is required because IoInitializeTimer and friends is missing from Windows on ARM64.
+ */
+
+static LIST_ENTRY FspDeviceTimerList;
+static KSPIN_LOCK FspDeviceTimerLock;
+static KDPC FspDeviceTimerDpc;
+static KTIMER FspDeviceTimer;
+
+static KDEFERRED_ROUTINE FspDeviceTimerRoutine;
+
+NTSTATUS FspDeviceInitializeAllTimers(VOID)
+{
+ LARGE_INTEGER DueTime;
+ LONG Period;
+
+ InitializeListHead(&FspDeviceTimerList);
+ KeInitializeSpinLock(&FspDeviceTimerLock);
+
+ KeInitializeDpc(&FspDeviceTimerDpc, FspDeviceTimerRoutine, 0);
+ KeInitializeTimerEx(&FspDeviceTimer, SynchronizationTimer);
+
+ DueTime.QuadPart = 1000/*ms*/ * -10000;
+ Period = 1000/*ms*/;
+ KeSetTimerEx(&FspDeviceTimer, DueTime, Period, &FspDeviceTimerDpc);
+
+ return STATUS_SUCCESS;
+}
+
+VOID FspDeviceFinalizeAllTimers(VOID)
+{
+ KeCancelTimer(&FspDeviceTimer);
+
+#if DBG
+ KIRQL Irql;
+ KeAcquireSpinLock(&FspDeviceTimerLock, &Irql);
+ ASSERT(IsListEmpty(&FspDeviceTimerList));
+ KeReleaseSpinLock(&FspDeviceTimerLock, Irql);
+#endif
+}
+
+static VOID FspDeviceTimerRoutine(
+ PKDPC Dpc,
+ PVOID DeferredContext,
+ PVOID SystemArgument1,
+ PVOID SystemArgument2)
+{
+ FSP_DEVICE_TIMER *Timer;
+ PLIST_ENTRY ListEntry;
+ KIRQL Irql;
+
+ KeAcquireSpinLock(&FspDeviceTimerLock, &Irql);
+ for (ListEntry = FspDeviceTimerList.Flink;
+ &FspDeviceTimerList != ListEntry;
+ ListEntry = ListEntry->Flink)
+ {
+ Timer = CONTAINING_RECORD(ListEntry, FSP_DEVICE_TIMER, ListEntry);
+ Timer->TimerRoutine(Timer->DeviceObject, Timer->Context);
+ }
+ KeReleaseSpinLock(&FspDeviceTimerLock, Irql);
+}
+
+NTSTATUS FspDeviceInitializeTimer(PDEVICE_OBJECT DeviceObject,
+ PIO_TIMER_ROUTINE TimerRoutine, PVOID Context)
+{
+ FSP_DEVICE_EXTENSION *DeviceExtension;
+
+ DeviceExtension = FspDeviceExtension(DeviceObject);
+
+ DeviceExtension->DeviceTimer.TimerRoutine = TimerRoutine;
+ DeviceExtension->DeviceTimer.DeviceObject = DeviceObject;
+ DeviceExtension->DeviceTimer.Context = Context;
+
+ return STATUS_SUCCESS;
+}
+
+VOID FspDeviceStartTimer(PDEVICE_OBJECT DeviceObject)
+{
+ FSP_DEVICE_EXTENSION *DeviceExtension;
+ KIRQL Irql;
+
+ DeviceExtension = FspDeviceExtension(DeviceObject);
+
+ KeAcquireSpinLock(&FspDeviceTimerLock, &Irql);
+ InsertTailList(&FspDeviceTimerList, &DeviceExtension->DeviceTimer.ListEntry);
+ KeReleaseSpinLock(&FspDeviceTimerLock, Irql);
+}
+
+VOID FspDeviceStopTimer(PDEVICE_OBJECT DeviceObject)
+{
+ FSP_DEVICE_EXTENSION *DeviceExtension;
+ KIRQL Irql;
+
+ DeviceExtension = FspDeviceExtension(DeviceObject);
+
+ KeAcquireSpinLock(&FspDeviceTimerLock, &Irql);
+ RemoveEntryList(&DeviceExtension->DeviceTimer.ListEntry);
+ KeReleaseSpinLock(&FspDeviceTimerLock, Irql);
+}
diff --git a/src/sys/driver.c b/src/sys/driver.c
index d91e2ebb..c1f878ab 100644
--- a/src/sys/driver.c
+++ b/src/sys/driver.c
@@ -123,7 +123,7 @@ NTSTATUS DriverEntry(
DriverObject->FastIoDispatch = &FspFastIoDispatch;
BOOLEAN InitDoneGRes = FALSE, InitDoneSilo = FALSE, InitDonePsBuf = FALSE,
- InitDoneDevices = FALSE;
+ InitDoneTimers = FALSE, InitDoneDevices = FALSE;
FspDriverObject = DriverObject;
FspDriverMultiVersionInitialize();
@@ -141,6 +141,11 @@ NTSTATUS DriverEntry(
goto exit;
InitDonePsBuf = TRUE;
+ Result = FspDeviceInitializeAllTimers();
+ if (!NT_SUCCESS(Result))
+ goto exit;
+ InitDoneTimers = TRUE;
+
Result = FspDriverInitializeDevices();
if (!NT_SUCCESS(Result))
goto exit;
@@ -153,6 +158,8 @@ exit:
{
if (InitDoneDevices)
FspDriverFinalizeDevices();
+ if (InitDoneTimers)
+ FspDeviceFinalizeAllTimers();
if (InitDonePsBuf)
FspProcessBufferFinalize();
if (InitDoneSilo)
diff --git a/src/sys/driver.h b/src/sys/driver.h
index d164e3a4..f450fb33 100644
--- a/src/sys/driver.h
+++ b/src/sys/driver.h
@@ -1117,6 +1117,13 @@ enum
FspFsvolDeviceEaCacheItemSizeMax = FSP_FSCTL_ALIGN_UP(16384, PAGE_SIZE),
};
typedef struct
+{
+ LIST_ENTRY ListEntry;
+ PIO_TIMER_ROUTINE TimerRoutine;
+ PDEVICE_OBJECT DeviceObject;
+ PVOID Context;
+} FSP_DEVICE_TIMER;
+typedef struct
{
PUNICODE_STRING FileName;
PVOID Context;
@@ -1144,6 +1151,8 @@ typedef struct
LONG RefCount;
UINT32 Kind;
GUID SiloContainerId;
+ /* IoTimer emulation */
+ FSP_DEVICE_TIMER DeviceTimer;
} FSP_DEVICE_EXTENSION;
typedef struct
{
@@ -1295,6 +1304,12 @@ NTSTATUS FspDeviceCopyList(
VOID FspDeviceDeleteList(
PDEVICE_OBJECT *DeviceObjects, ULONG DeviceObjectCount);
VOID FspDeviceDeleteAll(VOID);
+NTSTATUS FspDeviceInitializeAllTimers(VOID);
+VOID FspDeviceFinalizeAllTimers(VOID);
+NTSTATUS FspDeviceInitializeTimer(PDEVICE_OBJECT DeviceObject,
+ PIO_TIMER_ROUTINE TimerRoutine, PVOID Context);
+VOID FspDeviceStartTimer(PDEVICE_OBJECT DeviceObject);
+VOID FspDeviceStopTimer(PDEVICE_OBJECT DeviceObject);
static inline
VOID FspDeviceGlobalLock(VOID)
{
diff --git a/tools/build.bat b/tools/build.bat
index e1b661cf..9fbe474d 100755
--- a/tools/build.bat
+++ b/tools/build.bat
@@ -24,6 +24,13 @@ if X%~nx0==Xbuild-choco.bat (
goto :choco
)
+set BuildArm64=yes
+if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" (
+ echo WARNING: APPVEYOR BUILD ON UNSUPPORTED VERSION OF VISUAL STUDIO.
+ echo:
+ set BuildArm64=no
+)
+
call "%~dp0vcvarsall.bat" x64
if not X%SignedPackage%==X (
@@ -44,12 +51,23 @@ if X%SignedPackage%==X (
if exist "%%d" rmdir /s/q "%%d"
)
+ if X%BuildArm64%==Xyes (
+ devenv winfsp.sln /build "%Configuration%|ARM64"
+ if errorlevel 1 goto fail
+ )
devenv winfsp.sln /build "%Configuration%|x64"
if errorlevel 1 goto fail
devenv winfsp.sln /build "%Configuration%|x86"
if errorlevel 1 goto fail
+ if X%BuildArm64%==Xno (
+ echo:
+ echo WARNING: APPVEYOR BUILD ON UNSUPPORTED VERSION OF VISUAL STUDIO.
+ echo WARNING: ARM64 BUILD PRODUCTS ARE COPIES OF X64 BUILD PRODUCTS.
+ echo:
+ copy build\%Configuration%\*-x64.* build\%Configuration%\*-a64.* >nul
+ )
- for %%f in (build\%Configuration%\%MyProductFileName%-x64.sys build\%Configuration%\%MyProductFileName%-x86.sys) do (
+ for %%f in (build\%Configuration%\%MyProductFileName%-a64.sys build\%Configuration%\%MyProductFileName%-x64.sys build\%Configuration%\%MyProductFileName%-x86.sys) do (
signtool sign /ac %CrossCert% /i %Issuer% /n %Subject% /fd sha1 /t http://timestamp.digicert.com %%f
if errorlevel 1 set /a signfail=signfail+1
signtool sign /as /ac %CrossCert% /i %Issuer% /n %Subject% /fd sha256 /tr http://timestamp.digicert.com /td sha256 %%f
@@ -69,6 +87,9 @@ if X%SignedPackage%==X (
echo .Set Compress=on >>driver.ddf
echo .Set CabinetNameTemplate=driver.cab >>driver.ddf
echo .Set DiskDirectory1=. >>driver.ddf
+ echo .Set DestinationDir=a64 >>driver.ddf
+ echo driver-a64.inf >>driver.ddf
+ echo %MyProductFileName%-a64.sys >>driver.ddf
echo .Set DestinationDir=x64 >>driver.ddf
echo driver-x64.inf >>driver.ddf
echo %MyProductFileName%-x64.sys >>driver.ddf
diff --git a/tools/gensrc/remove-build-arm64.bat b/tools/gensrc/remove-build-arm64.bat
new file mode 100644
index 00000000..aaefa3a3
--- /dev/null
+++ b/tools/gensrc/remove-build-arm64.bat
@@ -0,0 +1,21 @@
+@echo off
+
+setlocal
+setlocal EnableDelayedExpansion
+
+if "%1"=="" (
+ cd %~dp0..\..
+) else (
+ cd "%1"
+)
+
+for /r %%f in (*.vcxproj) do (
+ echo %%f
+ powershell -NoProfile -ExecutionPolicy Bypass -Command "& '%~dp0remove-vcxproj-config.ps1' -Path '%%f' -ProjectConfiguration '|ARM64'
+)
+
+for /r %%f in (*.sln) do (
+ echo %%f
+ findstr /V /C:"|ARM64" "%%f" > "%%f.new"
+ move /Y "%%f.new" "%%f" >nul
+)
diff --git a/tools/gensrc/remove-vcxproj-config.ps1 b/tools/gensrc/remove-vcxproj-config.ps1
new file mode 100644
index 00000000..d5d69e38
--- /dev/null
+++ b/tools/gensrc/remove-vcxproj-config.ps1
@@ -0,0 +1,20 @@
+param (
+ [Parameter(Mandatory)][string]$Path,
+ [Parameter(Mandatory)][string[]]$ProjectConfiguration
+)
+
+$file = Get-Item $Path
+
+$xmlob = New-Object xml
+$xmlob.PreserveWhitespace = $true
+$xmlob.Load($file.FullName)
+
+$xmlns = @{"msbuild" = "http://schemas.microsoft.com/developer/msbuild/2003"}
+$configs = Select-Xml -Xml $xmlob -Namespace $xmlns `
+ -XPath "//msbuild:ProjectConfiguration[contains(@Include,'$ProjectConfiguration')]"
+foreach ($config in $configs) {
+ $child = $config.Node
+ [void]$child.ParentNode.RemoveChild($child)
+}
+
+$xmlob.Save($file.FullName)
diff --git a/tools/impdef.bat b/tools/impdef.bat
index a865743e..b5e810c4 100755
--- a/tools/impdef.bat
+++ b/tools/impdef.bat
@@ -16,6 +16,8 @@ set outarch=%outarch:~-3%
set arch=x64
set cdef=/D_AMD64_
+if /i X%outarch%==Xa64 set arch=x64_arm64
+if /i X%outarch%==Xa64 set cdef=/D_ARM64_
if /i X%outarch%==Xx86 set arch=x86
if /i X%outarch%==Xx86 set cdef=/D_X86_
diff --git a/tst/airfs/airfs.sln b/tst/airfs/airfs.sln
index 15c9d006..9781c24a 100644
--- a/tst/airfs/airfs.sln
+++ b/tst/airfs/airfs.sln
@@ -7,16 +7,22 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "airfs", "airfs.vcxproj", "{
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
+ Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CA441CE7-C4DE-4B5E-AA72-D4D483413EF0}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {CA441CE7-C4DE-4B5E-AA72-D4D483413EF0}.Debug|ARM64.Build.0 = Debug|ARM64
{CA441CE7-C4DE-4B5E-AA72-D4D483413EF0}.Debug|x64.ActiveCfg = Debug|x64
{CA441CE7-C4DE-4B5E-AA72-D4D483413EF0}.Debug|x64.Build.0 = Debug|x64
{CA441CE7-C4DE-4B5E-AA72-D4D483413EF0}.Debug|x86.ActiveCfg = Debug|Win32
{CA441CE7-C4DE-4B5E-AA72-D4D483413EF0}.Debug|x86.Build.0 = Debug|Win32
+ {CA441CE7-C4DE-4B5E-AA72-D4D483413EF0}.Release|ARM64.ActiveCfg = Release|ARM64
+ {CA441CE7-C4DE-4B5E-AA72-D4D483413EF0}.Release|ARM64.Build.0 = Release|ARM64
{CA441CE7-C4DE-4B5E-AA72-D4D483413EF0}.Release|x64.ActiveCfg = Release|x64
{CA441CE7-C4DE-4B5E-AA72-D4D483413EF0}.Release|x64.Build.0 = Release|x64
{CA441CE7-C4DE-4B5E-AA72-D4D483413EF0}.Release|x86.ActiveCfg = Release|Win32
diff --git a/tst/airfs/airfs.vcxproj b/tst/airfs/airfs.vcxproj
index 3cd9bf9e..a20f275f 100644
--- a/tst/airfs/airfs.vcxproj
+++ b/tst/airfs/airfs.vcxproj
@@ -1,10 +1,18 @@
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -44,6 +52,12 @@
$(DefaultPlatformToolset)
Unicode
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
Application
false
@@ -51,6 +65,13 @@
true
Unicode
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -65,9 +86,15 @@
+
+
+
+
+
+
true
@@ -81,6 +108,12 @@
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ true
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\a64\
+
false
$(SolutionDir)build\$(Configuration)\
@@ -93,6 +126,12 @@
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ false
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\a64\
+
@@ -127,6 +166,23 @@
winfsp-$(PlatformTarget).dll
+
+
+
+
+ Level3
+ Disabled
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc
+
+
+ Console
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+
Level3
@@ -169,6 +225,27 @@
winfsp-$(PlatformTarget).dll
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc
+
+
+ Console
+ true
+ true
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+
@@ -179,4 +256,4 @@
-
+
\ No newline at end of file
diff --git a/tst/memfs-fuse/memfs-fuse.sln b/tst/memfs-fuse/memfs-fuse.sln
index b2db2e81..c576ec70 100644
--- a/tst/memfs-fuse/memfs-fuse.sln
+++ b/tst/memfs-fuse/memfs-fuse.sln
@@ -7,16 +7,22 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "memfs-fuse", "memfs-fuse.vc
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
+ Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CF538F42-C714-4653-B351-E72FD7B0B217}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {CF538F42-C714-4653-B351-E72FD7B0B217}.Debug|ARM64.Build.0 = Debug|ARM64
{CF538F42-C714-4653-B351-E72FD7B0B217}.Debug|x64.ActiveCfg = Debug|x64
{CF538F42-C714-4653-B351-E72FD7B0B217}.Debug|x64.Build.0 = Debug|x64
{CF538F42-C714-4653-B351-E72FD7B0B217}.Debug|x86.ActiveCfg = Debug|Win32
{CF538F42-C714-4653-B351-E72FD7B0B217}.Debug|x86.Build.0 = Debug|Win32
+ {CF538F42-C714-4653-B351-E72FD7B0B217}.Release|ARM64.ActiveCfg = Release|ARM64
+ {CF538F42-C714-4653-B351-E72FD7B0B217}.Release|ARM64.Build.0 = Release|ARM64
{CF538F42-C714-4653-B351-E72FD7B0B217}.Release|x64.ActiveCfg = Release|x64
{CF538F42-C714-4653-B351-E72FD7B0B217}.Release|x64.Build.0 = Release|x64
{CF538F42-C714-4653-B351-E72FD7B0B217}.Release|x86.ActiveCfg = Release|Win32
diff --git a/tst/memfs-fuse/memfs-fuse.vcxproj b/tst/memfs-fuse/memfs-fuse.vcxproj
index 42210d65..524a2f61 100644
--- a/tst/memfs-fuse/memfs-fuse.vcxproj
+++ b/tst/memfs-fuse/memfs-fuse.vcxproj
@@ -1,10 +1,18 @@
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -44,6 +52,12 @@
$(DefaultPlatformToolset)
Unicode
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
Application
false
@@ -51,6 +65,13 @@
true
Unicode
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -65,9 +86,15 @@
+
+
+
+
+
+
true
@@ -81,6 +108,12 @@
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ true
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\a64\
+
false
$(SolutionDir)build\$(Configuration)\
@@ -93,6 +126,12 @@
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ false
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\a64\
+
@@ -131,6 +170,25 @@
winfsp-$(PlatformTarget).dll
+
+
+
+
+ Level3
+ Disabled
+ FSP_FUSE_USE_STAT_EX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc\fuse;$(MSBuildProgramFiles32)\WinFsp\inc
+ MultiThreadedDebug
+ 4018
+
+
+ Console
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+
Level3
@@ -177,6 +235,29 @@
winfsp-$(PlatformTarget).dll
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ FSP_FUSE_USE_STAT_EX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc\fuse;$(MSBuildProgramFiles32)\WinFsp\inc
+ MultiThreaded
+ 4018
+
+
+ Console
+ true
+ true
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+
diff --git a/tst/memfs-fuse3/memfs-fuse3.sln b/tst/memfs-fuse3/memfs-fuse3.sln
index 9e3b6efa..3dfb1301 100644
--- a/tst/memfs-fuse3/memfs-fuse3.sln
+++ b/tst/memfs-fuse3/memfs-fuse3.sln
@@ -7,16 +7,22 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "memfs-fuse3", "memfs-fuse3.
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
+ Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CF538F42-C714-4653-B351-E72FD7B0B217}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {CF538F42-C714-4653-B351-E72FD7B0B217}.Debug|ARM64.Build.0 = Debug|ARM64
{CF538F42-C714-4653-B351-E72FD7B0B217}.Debug|x64.ActiveCfg = Debug|x64
{CF538F42-C714-4653-B351-E72FD7B0B217}.Debug|x64.Build.0 = Debug|x64
{CF538F42-C714-4653-B351-E72FD7B0B217}.Debug|x86.ActiveCfg = Debug|Win32
{CF538F42-C714-4653-B351-E72FD7B0B217}.Debug|x86.Build.0 = Debug|Win32
+ {CF538F42-C714-4653-B351-E72FD7B0B217}.Release|ARM64.ActiveCfg = Release|ARM64
+ {CF538F42-C714-4653-B351-E72FD7B0B217}.Release|ARM64.Build.0 = Release|ARM64
{CF538F42-C714-4653-B351-E72FD7B0B217}.Release|x64.ActiveCfg = Release|x64
{CF538F42-C714-4653-B351-E72FD7B0B217}.Release|x64.Build.0 = Release|x64
{CF538F42-C714-4653-B351-E72FD7B0B217}.Release|x86.ActiveCfg = Release|Win32
diff --git a/tst/memfs-fuse3/memfs-fuse3.vcxproj b/tst/memfs-fuse3/memfs-fuse3.vcxproj
index ca26671f..c59df75e 100644
--- a/tst/memfs-fuse3/memfs-fuse3.vcxproj
+++ b/tst/memfs-fuse3/memfs-fuse3.vcxproj
@@ -1,10 +1,18 @@
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -44,6 +52,12 @@
$(DefaultPlatformToolset)
Unicode
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
Application
false
@@ -51,6 +65,13 @@
true
Unicode
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -65,9 +86,15 @@
+
+
+
+
+
+
true
@@ -81,6 +108,12 @@
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ true
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\a64\
+
false
$(SolutionDir)build\$(Configuration)\
@@ -93,6 +126,12 @@
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ false
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\a64\
+
@@ -131,6 +170,25 @@
winfsp-$(PlatformTarget).dll
+
+
+
+
+ Level3
+ Disabled
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc\fuse3;$(MSBuildProgramFiles32)\WinFsp\inc
+ MultiThreadedDebug
+ 4018
+
+
+ Console
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+
Level3
@@ -177,6 +235,29 @@
winfsp-$(PlatformTarget).dll
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc\fuse3;$(MSBuildProgramFiles32)\WinFsp\inc
+ MultiThreaded
+ 4018
+
+
+ Console
+ true
+ true
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+
diff --git a/tst/notifyfs/notifyfs.sln b/tst/notifyfs/notifyfs.sln
index 10a7118d..6c936c6f 100644
--- a/tst/notifyfs/notifyfs.sln
+++ b/tst/notifyfs/notifyfs.sln
@@ -7,16 +7,22 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "notifyfs", "notifyfs.vcxpro
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
+ Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {4BA1DED0-4268-408A-A4E2-8E1A6D55A99C}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {4BA1DED0-4268-408A-A4E2-8E1A6D55A99C}.Debug|ARM64.Build.0 = Debug|ARM64
{4BA1DED0-4268-408A-A4E2-8E1A6D55A99C}.Debug|x64.ActiveCfg = Debug|x64
{4BA1DED0-4268-408A-A4E2-8E1A6D55A99C}.Debug|x64.Build.0 = Debug|x64
{4BA1DED0-4268-408A-A4E2-8E1A6D55A99C}.Debug|x86.ActiveCfg = Debug|Win32
{4BA1DED0-4268-408A-A4E2-8E1A6D55A99C}.Debug|x86.Build.0 = Debug|Win32
+ {4BA1DED0-4268-408A-A4E2-8E1A6D55A99C}.Release|ARM64.ActiveCfg = Release|ARM64
+ {4BA1DED0-4268-408A-A4E2-8E1A6D55A99C}.Release|ARM64.Build.0 = Release|ARM64
{4BA1DED0-4268-408A-A4E2-8E1A6D55A99C}.Release|x64.ActiveCfg = Release|x64
{4BA1DED0-4268-408A-A4E2-8E1A6D55A99C}.Release|x64.Build.0 = Release|x64
{4BA1DED0-4268-408A-A4E2-8E1A6D55A99C}.Release|x86.ActiveCfg = Release|Win32
diff --git a/tst/notifyfs/notifyfs.vcxproj b/tst/notifyfs/notifyfs.vcxproj
index fdf7e0c3..51d627e2 100644
--- a/tst/notifyfs/notifyfs.vcxproj
+++ b/tst/notifyfs/notifyfs.vcxproj
@@ -1,10 +1,18 @@
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -45,6 +53,12 @@
$(DefaultPlatformToolset)
Unicode
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
Application
false
@@ -52,6 +66,13 @@
true
Unicode
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -66,9 +87,15 @@
+
+
+
+
+
+
true
@@ -88,12 +115,24 @@
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ true
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\a64\
+
false
$(SolutionDir)build\$(Configuration)\
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ false
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\a64\
+
Level3
@@ -146,6 +185,22 @@
winfsp-$(PlatformTarget).dll
+
+
+ Level3
+ true
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc
+ MultiThreaded
+
+
+ Console
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+
Level3
@@ -166,6 +221,26 @@
winfsp-$(PlatformTarget).dll
+
+
+ Level3
+ true
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc
+ MultiThreaded
+
+
+ Console
+ true
+ true
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+
diff --git a/tst/passthrough-cpp/passthrough-cpp.sln b/tst/passthrough-cpp/passthrough-cpp.sln
index aad02bd1..c40785e6 100644
--- a/tst/passthrough-cpp/passthrough-cpp.sln
+++ b/tst/passthrough-cpp/passthrough-cpp.sln
@@ -7,16 +7,22 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "passthrough-cpp", "passthro
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
+ Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E8A4060D-E6A4-42CC-9BCA-DC82E6EDB2C5}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {E8A4060D-E6A4-42CC-9BCA-DC82E6EDB2C5}.Debug|ARM64.Build.0 = Debug|ARM64
{E8A4060D-E6A4-42CC-9BCA-DC82E6EDB2C5}.Debug|x64.ActiveCfg = Debug|x64
{E8A4060D-E6A4-42CC-9BCA-DC82E6EDB2C5}.Debug|x64.Build.0 = Debug|x64
{E8A4060D-E6A4-42CC-9BCA-DC82E6EDB2C5}.Debug|x86.ActiveCfg = Debug|Win32
{E8A4060D-E6A4-42CC-9BCA-DC82E6EDB2C5}.Debug|x86.Build.0 = Debug|Win32
+ {E8A4060D-E6A4-42CC-9BCA-DC82E6EDB2C5}.Release|ARM64.ActiveCfg = Release|ARM64
+ {E8A4060D-E6A4-42CC-9BCA-DC82E6EDB2C5}.Release|ARM64.Build.0 = Release|ARM64
{E8A4060D-E6A4-42CC-9BCA-DC82E6EDB2C5}.Release|x64.ActiveCfg = Release|x64
{E8A4060D-E6A4-42CC-9BCA-DC82E6EDB2C5}.Release|x64.Build.0 = Release|x64
{E8A4060D-E6A4-42CC-9BCA-DC82E6EDB2C5}.Release|x86.ActiveCfg = Release|Win32
diff --git a/tst/passthrough-cpp/passthrough-cpp.vcxproj b/tst/passthrough-cpp/passthrough-cpp.vcxproj
index f12b6b48..56273314 100644
--- a/tst/passthrough-cpp/passthrough-cpp.vcxproj
+++ b/tst/passthrough-cpp/passthrough-cpp.vcxproj
@@ -1,10 +1,18 @@
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -44,6 +52,12 @@
$(DefaultPlatformToolset)
Unicode
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
Application
false
@@ -51,6 +65,13 @@
true
Unicode
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -65,9 +86,15 @@
+
+
+
+
+
+
true
@@ -81,6 +108,12 @@
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ true
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
+
false
$(SolutionDir)build\$(Configuration)\
@@ -93,6 +126,12 @@
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ false
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
+
@@ -127,6 +166,23 @@
winfsp-$(PlatformTarget).dll
+
+
+
+
+ Level3
+ Disabled
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc
+
+
+ Console
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+
Level3
@@ -169,6 +225,27 @@
winfsp-$(PlatformTarget).dll
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc
+
+
+ Console
+ true
+ true
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+
diff --git a/tst/passthrough-fuse/passthrough-fuse.sln b/tst/passthrough-fuse/passthrough-fuse.sln
index 148df5cf..aee6f3cd 100644
--- a/tst/passthrough-fuse/passthrough-fuse.sln
+++ b/tst/passthrough-fuse/passthrough-fuse.sln
@@ -7,16 +7,22 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "passthrough-fuse", "passthr
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
+ Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C753851C-142F-4AAD-B2F7-CBF905C2A600}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {C753851C-142F-4AAD-B2F7-CBF905C2A600}.Debug|ARM64.Build.0 = Debug|ARM64
{C753851C-142F-4AAD-B2F7-CBF905C2A600}.Debug|x64.ActiveCfg = Debug|x64
{C753851C-142F-4AAD-B2F7-CBF905C2A600}.Debug|x64.Build.0 = Debug|x64
{C753851C-142F-4AAD-B2F7-CBF905C2A600}.Debug|x86.ActiveCfg = Debug|Win32
{C753851C-142F-4AAD-B2F7-CBF905C2A600}.Debug|x86.Build.0 = Debug|Win32
+ {C753851C-142F-4AAD-B2F7-CBF905C2A600}.Release|ARM64.ActiveCfg = Release|ARM64
+ {C753851C-142F-4AAD-B2F7-CBF905C2A600}.Release|ARM64.Build.0 = Release|ARM64
{C753851C-142F-4AAD-B2F7-CBF905C2A600}.Release|x64.ActiveCfg = Release|x64
{C753851C-142F-4AAD-B2F7-CBF905C2A600}.Release|x64.Build.0 = Release|x64
{C753851C-142F-4AAD-B2F7-CBF905C2A600}.Release|x86.ActiveCfg = Release|Win32
diff --git a/tst/passthrough-fuse/passthrough-fuse.vcxproj b/tst/passthrough-fuse/passthrough-fuse.vcxproj
index 4ddff1b2..ed613303 100644
--- a/tst/passthrough-fuse/passthrough-fuse.vcxproj
+++ b/tst/passthrough-fuse/passthrough-fuse.vcxproj
@@ -1,10 +1,18 @@
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -44,6 +52,12 @@
$(DefaultPlatformToolset)
Unicode
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
Application
false
@@ -51,6 +65,13 @@
true
Unicode
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -65,9 +86,15 @@
+
+
+
+
+
+
true
@@ -81,6 +108,12 @@
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ true
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\a64\
+
false
$(SolutionDir)build\$(Configuration)\
@@ -93,6 +126,12 @@
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ false
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\a64\
+
@@ -131,6 +170,25 @@
winfsp-$(PlatformTarget).dll
+
+
+
+
+ Level3
+ Disabled
+ FSP_FUSE_USE_STAT_EX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc\fuse;$(MSBuildProgramFiles32)\WinFsp\inc
+ MultiThreaded
+ 4996
+
+
+ Console
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+
Level3
@@ -177,6 +235,29 @@
winfsp-$(PlatformTarget).dll
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ FSP_FUSE_USE_STAT_EX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc\fuse;$(MSBuildProgramFiles32)\WinFsp\inc
+ MultiThreaded
+ 4996
+
+
+ Console
+ true
+ true
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+
diff --git a/tst/passthrough-fuse3/passthrough-fuse3.sln b/tst/passthrough-fuse3/passthrough-fuse3.sln
index d562ff36..36b1e2ce 100644
--- a/tst/passthrough-fuse3/passthrough-fuse3.sln
+++ b/tst/passthrough-fuse3/passthrough-fuse3.sln
@@ -7,16 +7,22 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "passthrough-fuse3", "passth
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
+ Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {5E99498C-D30C-48EF-A04A-7977C0305FAC}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {5E99498C-D30C-48EF-A04A-7977C0305FAC}.Debug|ARM64.Build.0 = Debug|ARM64
{5E99498C-D30C-48EF-A04A-7977C0305FAC}.Debug|x64.ActiveCfg = Debug|x64
{5E99498C-D30C-48EF-A04A-7977C0305FAC}.Debug|x64.Build.0 = Debug|x64
{5E99498C-D30C-48EF-A04A-7977C0305FAC}.Debug|x86.ActiveCfg = Debug|Win32
{5E99498C-D30C-48EF-A04A-7977C0305FAC}.Debug|x86.Build.0 = Debug|Win32
+ {5E99498C-D30C-48EF-A04A-7977C0305FAC}.Release|ARM64.ActiveCfg = Release|ARM64
+ {5E99498C-D30C-48EF-A04A-7977C0305FAC}.Release|ARM64.Build.0 = Release|ARM64
{5E99498C-D30C-48EF-A04A-7977C0305FAC}.Release|x64.ActiveCfg = Release|x64
{5E99498C-D30C-48EF-A04A-7977C0305FAC}.Release|x64.Build.0 = Release|x64
{5E99498C-D30C-48EF-A04A-7977C0305FAC}.Release|x86.ActiveCfg = Release|Win32
diff --git a/tst/passthrough-fuse3/passthrough-fuse3.vcxproj b/tst/passthrough-fuse3/passthrough-fuse3.vcxproj
index cacaa69e..47c2affb 100644
--- a/tst/passthrough-fuse3/passthrough-fuse3.vcxproj
+++ b/tst/passthrough-fuse3/passthrough-fuse3.vcxproj
@@ -1,10 +1,18 @@
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -44,6 +52,12 @@
$(DefaultPlatformToolset)
Unicode
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
Application
false
@@ -51,6 +65,13 @@
true
Unicode
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -65,9 +86,15 @@
+
+
+
+
+
+
true
@@ -81,6 +108,12 @@
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ true
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\a64\
+
false
$(SolutionDir)build\$(Configuration)\
@@ -93,6 +126,12 @@
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ false
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\a64\
+
@@ -131,6 +170,25 @@
winfsp-$(PlatformTarget).dll
+
+
+
+
+ Level3
+ Disabled
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc\fuse3;$(MSBuildProgramFiles32)\WinFsp\inc
+ MultiThreaded
+ 4996
+
+
+ Console
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+
Level3
@@ -177,6 +235,29 @@
winfsp-$(PlatformTarget).dll
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc\fuse3;$(MSBuildProgramFiles32)\WinFsp\inc
+ MultiThreaded
+ 4996
+
+
+ Console
+ true
+ true
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+
diff --git a/tst/passthrough/passthrough.sln b/tst/passthrough/passthrough.sln
index 427b76fa..68f4c279 100644
--- a/tst/passthrough/passthrough.sln
+++ b/tst/passthrough/passthrough.sln
@@ -7,16 +7,22 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "passthrough", "passthrough.
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
+ Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {9E0E5997-7316-4818-A130-00B3AF1AD354}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {9E0E5997-7316-4818-A130-00B3AF1AD354}.Debug|ARM64.Build.0 = Debug|ARM64
{9E0E5997-7316-4818-A130-00B3AF1AD354}.Debug|x64.ActiveCfg = Debug|x64
{9E0E5997-7316-4818-A130-00B3AF1AD354}.Debug|x64.Build.0 = Debug|x64
{9E0E5997-7316-4818-A130-00B3AF1AD354}.Debug|x86.ActiveCfg = Debug|Win32
{9E0E5997-7316-4818-A130-00B3AF1AD354}.Debug|x86.Build.0 = Debug|Win32
+ {9E0E5997-7316-4818-A130-00B3AF1AD354}.Release|ARM64.ActiveCfg = Release|ARM64
+ {9E0E5997-7316-4818-A130-00B3AF1AD354}.Release|ARM64.Build.0 = Release|ARM64
{9E0E5997-7316-4818-A130-00B3AF1AD354}.Release|x64.ActiveCfg = Release|x64
{9E0E5997-7316-4818-A130-00B3AF1AD354}.Release|x64.Build.0 = Release|x64
{9E0E5997-7316-4818-A130-00B3AF1AD354}.Release|x86.ActiveCfg = Release|Win32
diff --git a/tst/passthrough/passthrough.vcxproj b/tst/passthrough/passthrough.vcxproj
index 1ea9c8f5..70dd16e3 100644
--- a/tst/passthrough/passthrough.vcxproj
+++ b/tst/passthrough/passthrough.vcxproj
@@ -1,10 +1,18 @@
+
+ Debug
+ ARM64
+
Debug
Win32
+
+ Release
+ ARM64
+
Release
Win32
@@ -47,6 +55,12 @@
$(DefaultPlatformToolset)
Unicode
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
Application
false
@@ -54,6 +68,13 @@
true
Unicode
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
@@ -68,9 +89,15 @@
+
+
+
+
+
+
true
@@ -84,6 +111,12 @@
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ true
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\a64\
+
false
$(SolutionDir)build\$(Configuration)\
@@ -96,6 +129,12 @@
$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\
$(ProjectName)-$(PlatformTarget)
+
+ $(ProjectName)-a64
+ false
+ $(SolutionDir)build\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName).build\$(Configuration)\a64\
+
@@ -132,6 +171,24 @@
winfsp-$(PlatformTarget).dll
+
+
+
+
+ Level3
+ Disabled
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc
+ MultiThreaded
+
+
+ Console
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+
Level3
@@ -176,6 +233,28 @@
winfsp-$(PlatformTarget).dll
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(MSBuildProgramFiles32)\WinFsp\inc
+ MultiThreaded
+
+
+ Console
+ true
+ true
+ true
+ $(MSBuildProgramFiles32)\WinFsp\lib\winfsp-a64.lib;%(AdditionalDependencies)
+ winfsp-a64.dll
+
+