From 7dffa4be72c77bd7322039ffdc558a842abba8af Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Wed, 28 Jul 2021 13:50:40 +0200 Subject: [PATCH] vs: move shared configuration to wintun.props and upgrade Remember to rename wintun.vcxproj.user file in your local working folder to wintun.props.user manually. Signed-off-by: Simon Rozman --- api/adapter.c | 24 ++++-- api/api.vcxproj | 167 +++++----------------------------------- api/api.vcxproj.filters | 6 +- api/logger.h | 2 +- api/{entry.c => main.c} | 1 - api/{entry.h => main.h} | 0 api/namespace.c | 2 +- api/registry.c | 1 - api/resource.c | 2 +- api/resources.rc | 18 +++-- api/rundll32.c | 20 +++-- api/session.c | 2 +- driver/driver.vcxproj | 88 ++------------------- example/example.c | 2 + example/example.vcxproj | 111 ++++---------------------- wintun.proj | 18 ++--- wintun.props | 120 +++++++++++++++++++++++++++-- wintun.sln | 38 ++++----- 18 files changed, 230 insertions(+), 392 deletions(-) rename api/{entry.c => main.c} (99%) rename api/{entry.h => main.h} (100%) diff --git a/api/adapter.c b/api/adapter.c index 348441a..4d75351 100644 --- a/api/adapter.c +++ b/api/adapter.c @@ -21,8 +21,8 @@ #include #include "adapter.h" -#include "entry.h" #include "logger.h" +#include "main.h" #include "namespace.h" #include "nci.h" #include "ntdll.h" @@ -401,8 +401,7 @@ static _Return_type_success_(return != FALSE) BOOL void AdapterInit(void) { - if (!MAYBE_WOW64) - return; +#ifdef MAYBE_WOW64 typedef BOOL(WINAPI * IsWow64Process2_t)( _In_ HANDLE hProcess, _Out_ USHORT * pProcessMachine, _Out_opt_ USHORT * pNativeMachine); HANDLE Kernel32; @@ -416,6 +415,7 @@ AdapterInit(void) NativeMachine = IsWow64Process(GetCurrentProcess(), &IsWoW64) && IsWoW64 ? IMAGE_FILE_MACHINE_AMD64 : IMAGE_FILE_PROCESS; } +#endif } static BOOL @@ -905,9 +905,11 @@ IsWindows10(void) static BOOL HaveWHQL(void) { - if (HAVE_WHQL) - return IsWindows10(); +#if defined(HAVE_WHQL) + return IsWindows10(); +#else return FALSE; +#endif } static _Return_type_success_(return != FALSE) BOOL InstallCertificate(_In_z_ const WCHAR *SignedResource) @@ -1778,12 +1780,14 @@ _Return_type_success_(return != NULL) WINTUN_ADAPTER *WINAPI WintunCreateAdapter *RebootRequired = FALSE; DWORD LastError; WINTUN_ADAPTER *Adapter; - if (MAYBE_WOW64 && NativeMachine != IMAGE_FILE_PROCESS) +#ifdef MAYBE_WOW64 + if (NativeMachine != IMAGE_FILE_PROCESS) { Adapter = CreateAdapterViaRundll32(Pool, Name, RequestedGUID, RebootRequired); LastError = Adapter ? ERROR_SUCCESS : GetLastError(); goto cleanup; } +#endif Adapter = CreateAdapter(Pool, Name, RequestedGUID, RebootRequired); LastError = Adapter ? ERROR_SUCCESS : GetLastError(); cleanup: @@ -1800,12 +1804,14 @@ _Return_type_success_(return != FALSE) BOOL WINAPI WintunDeleteAdapter( RebootRequired = &DummyRebootRequired; *RebootRequired = FALSE; DWORD LastError; - if (MAYBE_WOW64 && NativeMachine != IMAGE_FILE_PROCESS) +#ifdef MAYBE_WOW64 + if (NativeMachine != IMAGE_FILE_PROCESS) { LastError = DeleteAdapterViaRundll32(Adapter, ForceCloseSessions, RebootRequired) ? ERROR_SUCCESS : GetLastError(); goto cleanup; } +#endif HANDLE Mutex = NamespaceTakePoolMutex(Adapter->Pool); if (!Mutex) @@ -1916,11 +1922,13 @@ _Return_type_success_(return != FALSE) BOOL WINAPI *RebootRequired = FALSE; DWORD LastError = ERROR_SUCCESS; - if (MAYBE_WOW64 && NativeMachine != IMAGE_FILE_PROCESS) +#ifdef MAYBE_WOW64 + if (NativeMachine != IMAGE_FILE_PROCESS) { LastError = DeletePoolDriverViaRundll32(Pool, RebootRequired) ? ERROR_SUCCESS : GetLastError(); goto cleanup; } +#endif if (!DeleteAllOurAdapters(Pool, RebootRequired)) { diff --git a/api/api.vcxproj b/api/api.vcxproj index 5aeedc1..00a6266 100644 --- a/api/api.vcxproj +++ b/api/api.vcxproj @@ -1,162 +1,46 @@ - - - Debug - ARM - - - Debug - ARM64 - - - Debug - Win32 - - - Release - ARM - - - Release - ARM64 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - 16.0 {897F02E3-3EAA-40AF-A6DC-17EB2376EDAF} - Win32Proj api - $(LatestTargetPlatformVersion) api - DynamicLibrary - Unicode WindowsApplicationForDrivers10.0 - false - false - - true - - - true - - - Windows7 - - - Windows8 - - - Windows7 - - - Windows10 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - ..\$(Configuration)\$(WintunPlatform)\ - ..\$(Configuration)\$(WintunPlatform)\$(ProjectName)-intermediate\ wintun - NativeRecommendedRules.ruleset - true true _WINDOWS;_USRDLL;%(PreprocessorDefinitions) HAVE_WHQL;%(PreprocessorDefinitions) + MAYBE_WOW64;%(PreprocessorDefinitions) + ACCEPT_WOW64;MAYBE_WOW64;%(PreprocessorDefinitions) + MAYBE_WOW64;%(PreprocessorDefinitions) + ACCEPT_WOW64;%(PreprocessorDefinitions) /volatile:iso %(AdditionalOptions) + 4100;4201;$(DisableSpecificWarnings) $(IntDir);%(AdditionalIncludeDirectories) ..\$(Configuration)\$(WintunPlatform);..\$(Configuration);%(AdditionalIncludeDirectories) HAVE_WHQL;%(PreprocessorDefinitions) - _M_IX86=600;%(PreprocessorDefinitions) - _M_AMD64=100;%(PreprocessorDefinitions) - _M_ARM=7;%(PreprocessorDefinitions) - _M_ARM64=1;%(PreprocessorDefinitions) + BUILT_ARM64_WOW64;%(PreprocessorDefinitions) + BUILT_AMD64_WOW64;%(PreprocessorDefinitions) + WANT_ARM64_WOW64;WANT_AMD64_WOW64;%(PreprocessorDefinitions) + WANT_ARM64_WOW64;%(PreprocessorDefinitions) + WANT_ARM64_WOW64;%(PreprocessorDefinitions) advapi32.dll;bcrypt.dll;crypt32.dll;cfgmgr32.dll;iphlpapi.dll;ole32.dll;nci.dll;setupapi.dll;shell32.dll;shlwapi.dll;version.dll Bcrypt.lib;Crypt32.lib;Cfgmgr32.lib;Iphlpapi.lib;$(IntDir)nci.lib;ntdll.lib;Setupapi.lib;shlwapi.lib;version.lib;%(AdditionalDependencies) exports.def Windows - - - - - _DEBUG;%(PreprocessorDefinitions) - MultiThreadedDebug - - - _DEBUG;%(PreprocessorDefinitions) - - - - - NDEBUG;%(PreprocessorDefinitions) - MultiThreaded - - - NDEBUG;%(PreprocessorDefinitions) - - - true - true - UseLinkTimeCodeGeneration + $(IntDir)$(TargetName).lib @@ -167,7 +51,7 @@ - + true @@ -181,7 +65,7 @@ - + @@ -190,18 +74,14 @@ + - - - + - $(BuildDependsOn);SignTarget - CleanInfVersion;CleanNci;CleanSignTarget;$(CleanDependsOn) - "$(SignToolPath)" sign /sha1 "$(TestCertificate)" /fd sha256 "$(TargetPath)" - "$(SignToolPath)" sign /sha1 "$(ProductionCertificate)" /fd sha256 /tr "$(TimeStampServer)" /td sha256 "$(TargetPath)" + CleanInfVersion;CleanNci;$(CleanDependsOn) - - + + @@ -213,11 +93,4 @@ - - - - - - - - + \ No newline at end of file diff --git a/api/api.vcxproj.filters b/api/api.vcxproj.filters index 05c580d..9bcf3d5 100644 --- a/api/api.vcxproj.filters +++ b/api/api.vcxproj.filters @@ -49,7 +49,7 @@ Header Files - + Header Files @@ -81,8 +81,8 @@ Source Files - + Source Files - + \ No newline at end of file diff --git a/api/logger.h b/api/logger.h index 3ffda6e..0ba4d55 100644 --- a/api/logger.h +++ b/api/logger.h @@ -6,7 +6,7 @@ #pragma once #include "wintun.h" -#include "entry.h" +#include "main.h" #include "registry.h" #include #include diff --git a/api/entry.c b/api/main.c similarity index 99% rename from api/entry.c rename to api/main.c index c74cffe..16d3b7c 100644 --- a/api/entry.c +++ b/api/main.c @@ -4,7 +4,6 @@ */ #include "adapter.h" -#include "entry.h" #include "logger.h" #include "registry.h" #include "namespace.h" diff --git a/api/entry.h b/api/main.h similarity index 100% rename from api/entry.h rename to api/main.h diff --git a/api/namespace.c b/api/namespace.c index aa8ffb4..8f1449a 100644 --- a/api/namespace.c +++ b/api/namespace.c @@ -3,8 +3,8 @@ * Copyright (C) 2018-2021 WireGuard LLC. All Rights Reserved. */ -#include "entry.h" #include "logger.h" +#include "main.h" #include "namespace.h" #include diff --git a/api/registry.c b/api/registry.c index bf012e2..5da05e7 100644 --- a/api/registry.c +++ b/api/registry.c @@ -3,7 +3,6 @@ * Copyright (C) 2018-2021 WireGuard LLC. All Rights Reserved. */ -#include "entry.h" #include "logger.h" #include "registry.h" #include diff --git a/api/resource.c b/api/resource.c index 9a7379c..ce590e1 100644 --- a/api/resource.c +++ b/api/resource.c @@ -3,8 +3,8 @@ * Copyright (C) 2018-2021 WireGuard LLC. All Rights Reserved. */ -#include "entry.h" #include "logger.h" +#include "main.h" #include "resource.h" #include diff --git a/api/resources.rc b/api/resources.rc index 4186db8..aa61806 100644 --- a/api/resources.rc +++ b/api/resources.rc @@ -8,9 +8,9 @@ #pragma code_page(1252) -wintun.cat RCDATA "wintun\\wintun.cat" -wintun.inf RCDATA "wintun\\wintun.inf" -wintun.sys RCDATA "wintun\\wintun.sys" +wintun.cat RCDATA "driver\\wintun.cat" +wintun.inf RCDATA "driver\\wintun.inf" +wintun.sys RCDATA "driver\\wintun.sys" #ifdef HAVE_WHQL wintun-whql.cat RCDATA "whql\\wintun.cat" @@ -18,11 +18,19 @@ wintun-whql.inf RCDATA "whql\\wintun.inf" wintun-whql.sys RCDATA "whql\\wintun.sys" #endif -#if defined(_M_IX86) +#if defined(WANT_AMD64_WOW64) +# if defined(BUILT_AMD64_WOW64) wintun-amd64.dll RCDATA "amd64\\wintun.dll" +# else +# pragma message("AMD64 wintun.dll was not built, so this will not work from WOW64") +# endif #endif -#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_ARM) +#if defined(WANT_ARM64_WOW64) +# if defined(BUILT_ARM64_WOW64) wintun-arm64.dll RCDATA "arm64\\wintun.dll" +# else +# pragma message("ARM64 wintun.dll was not built, so this will not work from WOW64") +# endif #endif #define STRINGIZE(x) #x diff --git a/api/rundll32.c b/api/rundll32.c index 80ada15..99b1b26 100644 --- a/api/rundll32.c +++ b/api/rundll32.c @@ -3,19 +3,17 @@ * Copyright (C) 2018-2021 WireGuard LLC. All Rights Reserved. */ -#include "entry.h" +#include "adapter.h" +#include "logger.h" +#include "wintun.h" + +#include #include +#include +#include +#include -#if ACCEPT_WOW64 == 1 - -# include "adapter.h" -# include "logger.h" -# include "wintun.h" - -# include -# include -# include -# include +#ifdef ACCEPT_WOW64 # define EXPORT comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__) diff --git a/api/session.c b/api/session.c index 41c623f..ff158a8 100644 --- a/api/session.c +++ b/api/session.c @@ -4,8 +4,8 @@ */ #include "adapter.h" -#include "entry.h" #include "logger.h" +#include "main.h" #include "wintun.h" #include #include diff --git a/driver/driver.vcxproj b/driver/driver.vcxproj index a2ecd00..b326e41 100644 --- a/driver/driver.vcxproj +++ b/driver/driver.vcxproj @@ -1,93 +1,18 @@ - - - Debug - ARM - - - Debug - ARM64 - - - Debug - Win32 - - - Debug - x64 - - - Release - ARM - - - Release - ARM64 - - - Release - Win32 - - - Release - x64 - - {F7679B65-2FEC-469A-8BAC-B07BF4439422} - wintun - $(LatestTargetPlatformVersion) - wintun + driver + driver - WindowsKernelModeDriver10.0 Driver WDM - false - false - true - - false - - - true - - - Windows7 - - - Windows8 - - - Windows7 - - - Windows10 - - - - - - - - - <_ProjectFileVersion>15.0.28127.55 - ..\$(Configuration)\$(WintunPlatform)\$(ProjectName)-intermediate\ - ..\$(ConfigurationName)\$(WintunPlatform)\ - - - true - - - AllRules.ruleset - - true - + wintun @@ -100,9 +25,6 @@ ndis.lib;wdmsec.lib;%(AdditionalDependencies) - - sha256 - @@ -122,12 +44,12 @@ - + + - diff --git a/example/example.c b/example/example.c index 9e5f2e8..54ea0ec 100644 --- a/example/example.c +++ b/example/example.c @@ -7,9 +7,11 @@ #include #include #include +#include #include #include #include +#include #include "wintun.h" static WINTUN_CREATE_ADAPTER_FUNC WintunCreateAdapter; diff --git a/example/example.vcxproj b/example/example.vcxproj index 3c8d8d1..3e5bb35 100644 --- a/example/example.vcxproj +++ b/example/example.vcxproj @@ -1,84 +1,16 @@ - - - Debug - ARM - - - Debug - ARM64 - - - Debug - Win32 - - - Release - ARM - - - Release - ARM64 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - - - - - {897f02e3-3eaa-40af-a6dc-17eb2376edaf} - - - 16.0 - Win32Proj {2abac503-245d-4f53-85c5-0f844def738b} example - 10.0 example - - - true - - - true - Application - v142 - Unicode - false - - - - - - - - - - - - - ..\$(Configuration)\$(WintunPlatform)\ - ..\$(Configuration)\$(WintunPlatform)\$(ProjectName)-intermediate\ - NativeRecommendedRules.ruleset - true + WindowsApplicationForDrivers10.0 + Windows10 + _CONSOLE;%(PreprocessorDefinitions) @@ -87,32 +19,23 @@ Console - - - _DEBUG;%(PreprocessorDefinitions) - MultiThreadedDebug - - - - - NDEBUG;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - UseLinkTimeCodeGeneration - - - - iphlpapi.lib;kernel32.lib;ntdll.lib;ws2_32.lib;%(AdditionalDependencies) - ..\api + + iphlpapi.lib;kernel32.lib;ntdll.lib;ws2_32.lib;%(AdditionalDependencies) + + + + + + + {897f02e3-3eaa-40af-a6dc-17eb2376edaf} + + + - - - \ No newline at end of file + + diff --git a/wintun.proj b/wintun.proj index 76e746e..a1cd244 100644 --- a/wintun.proj +++ b/wintun.proj @@ -13,9 +13,10 @@ General Properties --> - + - + + @@ -24,7 +25,6 @@ - dist\wintun-$(WintunVersion).zip - dist\.tmp\ + dist\zip-intermediate\ @@ -116,7 +116,7 @@ + DependsOnTargets="Dll"> diff --git a/wintun.props b/wintun.props index 21a3e73..05ede6a 100644 --- a/wintun.props +++ b/wintun.props @@ -5,6 +5,74 @@ Copyright (C) 2019 WireGuard LLC. All Rights Reserved. --> + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + 16.0 + $(LatestTargetPlatformVersion) + + + + Unicode + false + true + + + true + + + true + + + Windows7 + + + Windows8 + + + Windows7 + + + Windows10 + + + + + + + 0 12 @@ -19,6 +87,20 @@ arm64 x86 amd64 + + ..\$(Configuration)\$(WintunPlatform)\$(ProjectName)-intermediate\ + ..\$(Configuration)\$(WintunPlatform)\ + $(IntDir) + ..\$(Configuration)\$(WintunPlatform)\$(ProjectName)\ + + + true + + + AllRules.ruleset + + true + @@ -28,6 +110,13 @@ WINTUN_VERSION_MAJ=$(WintunVersionMaj);WINTUN_VERSION_MIN=$(WintunVersionMin);WINTUN_VERSION_REL=$(WintunVersionRel);WINTUN_VERSION="$(WintunVersion)";%(PreprocessorDefinitions) + + $(OutDir)$(TargetName).pdb + $(PackageDir)$(TargetName).pdb + + + sha256 + @@ -35,18 +124,33 @@ true Speed + + true + true + UseLinkTimeCodeGeneration + Disabled - - $(IntDir)$(TargetName).pdb - - - $(PROCESSOR_ARCHITECTURE) - x64 - $(WindowsSdkDir)bin\$(TargetPlatformVersion)\$(WindowsSdkToolchainPlatform)\signtool.exe - + + + NDEBUG;%(PreprocessorDefinitions) + MultiThreaded + + + NDEBUG;%(PreprocessorDefinitions) + + + + + _DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebug + + + _DEBUG;%(PreprocessorDefinitions) + + diff --git a/wintun.sln b/wintun.sln index 49b0b32..1171620 100644 --- a/wintun.sln +++ b/wintun.sln @@ -5,12 +5,14 @@ MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example", "example\example.vcxproj", "{2ABAC503-245D-4F53-85C5-0F844DEF738B}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "api", "api\api.vcxproj", "{897F02E3-3EAA-40AF-A6DC-17EB2376EDAF}" + ProjectSection(ProjectDependencies) = postProject + {F7679B65-2FEC-469A-8BAC-B07BF4439422} = {F7679B65-2FEC-469A-8BAC-B07BF4439422} + EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wintun", "driver\driver.vcxproj", "{F7679B65-2FEC-469A-8BAC-B07BF4439422}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "driver", "driver\driver.vcxproj", "{F7679B65-2FEC-469A-8BAC-B07BF4439422}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3A98F138-EE02-4488-B856-B3C48500BEA8}" ProjectSection(SolutionItems) = preProject - COPYING = COPYING README.md = README.md wintun.proj = wintun.proj wintun.props = wintun.props @@ -28,6 +30,22 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|amd64.ActiveCfg = Debug|x64 + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|amd64.Build.0 = Debug|x64 + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|arm.ActiveCfg = Debug|ARM + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|arm.Build.0 = Debug|ARM + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|arm64.ActiveCfg = Debug|ARM64 + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|arm64.Build.0 = Debug|ARM64 + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|x86.ActiveCfg = Debug|Win32 + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|x86.Build.0 = Debug|Win32 + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|amd64.ActiveCfg = Release|x64 + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|amd64.Build.0 = Release|x64 + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|arm.ActiveCfg = Release|ARM + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|arm.Build.0 = Release|ARM + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|arm64.ActiveCfg = Release|ARM64 + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|arm64.Build.0 = Release|ARM64 + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|x86.ActiveCfg = Release|Win32 + {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|x86.Build.0 = Release|Win32 {897F02E3-3EAA-40AF-A6DC-17EB2376EDAF}.Debug|amd64.ActiveCfg = Debug|x64 {897F02E3-3EAA-40AF-A6DC-17EB2376EDAF}.Debug|amd64.Build.0 = Debug|x64 {897F02E3-3EAA-40AF-A6DC-17EB2376EDAF}.Debug|arm.ActiveCfg = Debug|ARM @@ -60,22 +78,6 @@ Global {F7679B65-2FEC-469A-8BAC-B07BF4439422}.Release|arm64.Build.0 = Release|ARM64 {F7679B65-2FEC-469A-8BAC-B07BF4439422}.Release|x86.ActiveCfg = Release|Win32 {F7679B65-2FEC-469A-8BAC-B07BF4439422}.Release|x86.Build.0 = Release|Win32 - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|amd64.ActiveCfg = Debug|x64 - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|amd64.Build.0 = Debug|x64 - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|arm.ActiveCfg = Debug|ARM - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|arm.Build.0 = Debug|ARM - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|arm64.ActiveCfg = Debug|ARM64 - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|arm64.Build.0 = Debug|ARM64 - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|x86.ActiveCfg = Debug|Win32 - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Debug|x86.Build.0 = Debug|Win32 - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|amd64.ActiveCfg = Release|x64 - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|amd64.Build.0 = Release|x64 - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|arm.ActiveCfg = Release|ARM - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|arm.Build.0 = Release|ARM - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|arm64.ActiveCfg = Release|ARM64 - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|arm64.Build.0 = Release|ARM64 - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|x86.ActiveCfg = Release|Win32 - {2ABAC503-245D-4F53-85C5-0F844DEF738B}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE