diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-01-31 13:42:51 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-02-03 09:13:29 +0100 |
| commit | 7e01878a7a5863a5c6e01b2fe7b0fa0e62a1759a (patch) | |
| tree | c1142c61ee54de1566061548522eed969cab7b46 | |
| parent | d4a0af28bd98972a0cbb129b4fabdca292a73080 (diff) | |
| download | mullvadvpn-7e01878a7a5863a5c6e01b2fe7b0fa0e62a1759a.tar.xz mullvadvpn-7e01878a7a5863a5c6e01b2fe7b0fa0e62a1759a.zip | |
Remove driverlogic plugin
| -rw-r--r-- | windows/nsis-plugins/nsis-plugins.sln | 10 | ||||
| -rw-r--r-- | windows/nsis-plugins/src/driverlogic/dllmain.cpp | 11 | ||||
| -rw-r--r-- | windows/nsis-plugins/src/driverlogic/driverlogic.cpp | 115 | ||||
| -rw-r--r-- | windows/nsis-plugins/src/driverlogic/driverlogic.def | 6 | ||||
| -rw-r--r-- | windows/nsis-plugins/src/driverlogic/driverlogic.vcxproj | 124 | ||||
| -rw-r--r-- | windows/nsis-plugins/src/driverlogic/driverlogic.vcxproj.filters | 17 | ||||
| -rw-r--r-- | windows/nsis-plugins/src/driverlogic/driverlogicops.cpp | 498 | ||||
| -rw-r--r-- | windows/nsis-plugins/src/driverlogic/driverlogicops.h | 46 | ||||
| -rw-r--r-- | windows/nsis-plugins/src/driverlogic/stdafx.cpp | 8 | ||||
| -rw-r--r-- | windows/nsis-plugins/src/driverlogic/stdafx.h | 16 | ||||
| -rw-r--r-- | windows/nsis-plugins/src/driverlogic/targetver.h | 12 |
11 files changed, 0 insertions, 863 deletions
diff --git a/windows/nsis-plugins/nsis-plugins.sln b/windows/nsis-plugins/nsis-plugins.sln index 4518d1f0fe..487b4bebf4 100644 --- a/windows/nsis-plugins/nsis-plugins.sln +++ b/windows/nsis-plugins/nsis-plugins.sln @@ -2,12 +2,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29324.140 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "driverlogic", "src\driverlogic\driverlogic.vcxproj", "{AABA9AB7-A7D0-4BB5-A1FA-92F566023E0D}" - ProjectSection(ProjectDependencies) = postProject - {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} - {1344152F-2BAD-4198-8E51-31AAC32BFBB2} = {1344152F-2BAD-4198-8E51-31AAC32BFBB2} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cleanup", "src\cleanup\cleanup.vcxproj", "{47B5C1C1-67D7-4544-9037-8E7F44C1E5BD}" ProjectSection(ProjectDependencies) = postProject {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} @@ -55,10 +49,6 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AABA9AB7-A7D0-4BB5-A1FA-92F566023E0D}.Debug|x86.ActiveCfg = Debug|Win32 - {AABA9AB7-A7D0-4BB5-A1FA-92F566023E0D}.Debug|x86.Build.0 = Debug|Win32 - {AABA9AB7-A7D0-4BB5-A1FA-92F566023E0D}.Release|x86.ActiveCfg = Release|Win32 - {AABA9AB7-A7D0-4BB5-A1FA-92F566023E0D}.Release|x86.Build.0 = Release|Win32 {47B5C1C1-67D7-4544-9037-8E7F44C1E5BD}.Debug|x86.ActiveCfg = Debug|Win32 {47B5C1C1-67D7-4544-9037-8E7F44C1E5BD}.Debug|x86.Build.0 = Debug|Win32 {47B5C1C1-67D7-4544-9037-8E7F44C1E5BD}.Release|x86.ActiveCfg = Release|Win32 diff --git a/windows/nsis-plugins/src/driverlogic/dllmain.cpp b/windows/nsis-plugins/src/driverlogic/dllmain.cpp deleted file mode 100644 index a5a44613dd..0000000000 --- a/windows/nsis-plugins/src/driverlogic/dllmain.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "stdafx.h" -#include <windows.h> - -BOOL APIENTRY DllMain(HMODULE, DWORD reason, LPVOID) -{ - // - // Avoid doing work in DllMain since the loader lock is held - // - - return TRUE; -} diff --git a/windows/nsis-plugins/src/driverlogic/driverlogic.cpp b/windows/nsis-plugins/src/driverlogic/driverlogic.cpp deleted file mode 100644 index 6861bbd623..0000000000 --- a/windows/nsis-plugins/src/driverlogic/driverlogic.cpp +++ /dev/null @@ -1,115 +0,0 @@ -#include "stdafx.h" -#include "../error.h" -#include "driverlogicops.h" -#include <libcommon/string.h> -#include <libcommon/error.h> -#include <libcommon/valuemapper.h> -#include <windows.h> - -// Suppress warnings caused by broken legacy code -#pragma warning (push) -#pragma warning (disable: 4005) -#include <nsis/pluginapi.h> -#pragma warning (pop) - -// -// RemoveVanillaMullvadTap -// -// Deletes the old Mullvad TAP adapter with ID tap0901. -// -// -enum class RemoveVanillaMullvadTapStatus -{ - GENERAL_ERROR = 0, - SUCCESS_NO_REMAINING_TAP_ADAPTERS, - SUCCESS_SOME_REMAINING_TAP_ADAPTERS -}; - -void __declspec(dllexport) NSISCALL RemoveVanillaMullvadTap -( - HWND hwndParent, - int string_size, - LPTSTR variables, - stack_t **stacktop, - extra_parameters *extra, - ... -) -{ - EXDLL_INIT(); - - try - { - pushstring(L""); - - switch (driverlogic::DeleteOldMullvadAdapter()) - { - case driverlogic::DeletionResult::NO_REMAINING_TAP_ADAPTERS: - { - pushint(RemoveVanillaMullvadTapStatus::SUCCESS_NO_REMAINING_TAP_ADAPTERS); - break; - } - - case driverlogic::DeletionResult::SOME_REMAINING_TAP_ADAPTERS: - { - pushint(RemoveVanillaMullvadTapStatus::SUCCESS_SOME_REMAINING_TAP_ADAPTERS); - break; - } - - default: - { - THROW_ERROR("Unexpected case"); - } - } - } - catch (std::exception &err) - { - pushstring(common::string::ToWide(err.what()).c_str()); - pushint(RemoveVanillaMullvadTapStatus::GENERAL_ERROR); - } - catch (...) - { - pushstring(L"Unspecified error"); - pushint(RemoveVanillaMullvadTapStatus::GENERAL_ERROR); - } -} - - -// -// IdentifyNewAdapter -// -// Call this function after installing a TAP adapter. -// -// By comparing with the previously captured baseline we're able to -// identify the new adapter. -// - -void __declspec(dllexport) NSISCALL IdentifyNewAdapter -( - HWND hwndParent, - int string_size, - LPTSTR variables, - stack_t **stacktop, - extra_parameters *extra, - ... -) -{ - EXDLL_INIT(); - - try - { - auto adapter = driverlogic::GetAdapter(); - - pushstring(adapter.alias.c_str()); - pushint(NsisStatus::SUCCESS); - } - catch (std::exception &err) - { - pushstring(common::string::ToWide(err.what()).c_str()); - pushint(NsisStatus::GENERAL_ERROR); - } - catch (...) - { - pushstring(L"Unspecified error"); - pushint(NsisStatus::GENERAL_ERROR); - } -} diff --git a/windows/nsis-plugins/src/driverlogic/driverlogic.def b/windows/nsis-plugins/src/driverlogic/driverlogic.def deleted file mode 100644 index 78730b5f9b..0000000000 --- a/windows/nsis-plugins/src/driverlogic/driverlogic.def +++ /dev/null @@ -1,6 +0,0 @@ -LIBRARY driverlogic - -EXPORTS - -IdentifyNewAdapter -RemoveVanillaMullvadTap diff --git a/windows/nsis-plugins/src/driverlogic/driverlogic.vcxproj b/windows/nsis-plugins/src/driverlogic/driverlogic.vcxproj deleted file mode 100644 index 40e9bac4e2..0000000000 --- a/windows/nsis-plugins/src/driverlogic/driverlogic.vcxproj +++ /dev/null @@ -1,124 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <VCProjectVersion>16.0</VCProjectVersion> - <ProjectGuid>{AABA9AB7-A7D0-4BB5-A1FA-92F566023E0D}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>driverlogic</RootNamespace> - <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)bin\$(Platform)-$(Configuration)\</OutDir> - <IntDir>$(SolutionDir)bin\temp\$(Platform)-$(Configuration)\$(ProjectName)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)bin\$(Platform)-$(Configuration)\</OutDir> - <IntDir>$(SolutionDir)bin\temp\$(Platform)-$(Configuration)\$(ProjectName)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>WIN32;_DEBUG;DRIVERLOGIC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - <AdditionalIncludeDirectories>$(ProjectDir)../../../../dist-assets/binaries/x86_64-pc-windows-msvc/;$(ProjectDir)../../../windows-libraries/src/;$(ProjectDir)../</AdditionalIncludeDirectories> - <LanguageStandard>stdcpplatest</LanguageStandard> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers> - <AdditionalLibraryDirectories>$(ProjectDir)../../../../dist-assets/binaries/x86_64-pc-windows-msvc/nsis/;$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> - <AdditionalDependencies>setupapi.lib;log.lib;libcommon.lib;pluginapi-x86-unicode.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <IgnoreSpecificDefaultLibraries>libc.lib</IgnoreSpecificDefaultLibraries> - <ModuleDefinitionFile>driverlogic.def</ModuleDefinitionFile> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>WIN32;NDEBUG;DRIVERLOGIC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - <AdditionalIncludeDirectories>$(ProjectDir)../../../../dist-assets/binaries/x86_64-pc-windows-msvc/;$(ProjectDir)../../../windows-libraries/src/;$(ProjectDir)../</AdditionalIncludeDirectories> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <LanguageStandard>stdcpplatest</LanguageStandard> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <GenerateDebugInformation>true</GenerateDebugInformation> - <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers> - <AdditionalLibraryDirectories>$(ProjectDir)../../../../dist-assets/binaries/x86_64-pc-windows-msvc/nsis/;$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> - <AdditionalDependencies>setupapi.lib;log.lib;libcommon.lib;pluginapi-x86-unicode.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <IgnoreSpecificDefaultLibraries>libc.lib</IgnoreSpecificDefaultLibraries> - <ModuleDefinitionFile>driverlogic.def</ModuleDefinitionFile> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClInclude Include="driverlogicops.h" /> - <ClInclude Include="stdafx.h" /> - <ClInclude Include="targetver.h" /> - </ItemGroup> - <ItemGroup> - <ClCompile Include="dllmain.cpp" /> - <ClCompile Include="driverlogic.cpp" /> - <ClCompile Include="driverlogicops.cpp" /> - <ClCompile Include="stdafx.cpp"> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader> - </ClCompile> - </ItemGroup> - <ItemGroup> - <None Include="driverlogic.def" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/windows/nsis-plugins/src/driverlogic/driverlogic.vcxproj.filters b/windows/nsis-plugins/src/driverlogic/driverlogic.vcxproj.filters deleted file mode 100644 index 2c390fd544..0000000000 --- a/windows/nsis-plugins/src/driverlogic/driverlogic.vcxproj.filters +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <ClInclude Include="stdafx.h" /> - <ClInclude Include="targetver.h" /> - <ClInclude Include="driverlogicops.h" /> - </ItemGroup> - <ItemGroup> - <ClCompile Include="dllmain.cpp" /> - <ClCompile Include="driverlogic.cpp" /> - <ClCompile Include="stdafx.cpp" /> - <ClCompile Include="driverlogicops.cpp" /> - </ItemGroup> - <ItemGroup> - <None Include="driverlogic.def" /> - </ItemGroup> -</Project>
\ No newline at end of file diff --git a/windows/nsis-plugins/src/driverlogic/driverlogicops.cpp b/windows/nsis-plugins/src/driverlogic/driverlogicops.cpp deleted file mode 100644 index b837565de1..0000000000 --- a/windows/nsis-plugins/src/driverlogic/driverlogicops.cpp +++ /dev/null @@ -1,498 +0,0 @@ -#include "stdafx.h" -#include "driverlogicops.h" - -#include <libcommon/guid.h> -#include <libcommon/string.h> -#include <libcommon/error.h> -#include <libcommon/memory.h> -#include <libcommon/network/nci.h> -#include <log/log.h> - -#include <windows.h> - -#include <vector> -#include <list> -#include <sstream> -#include <algorithm> - -#include <setupapi.h> -#include <devguid.h> -#include <combaseapi.h> -#include <initguid.h> -#include <devpkey.h> - -namespace -{ - -const wchar_t TAP_HARDWARE_ID[] = L"tapmullvad0901"; -const wchar_t DEPRECATED_TAP_HARDWARE_ID[] = L"tap0901"; - -template<typename T> -void LogAdapters(const std::wstring &description, const T &adapters) -{ - // - // Flatten the information so we can log it more easily. - // - - std::vector<std::wstring> details; - - for (const auto &adapter : adapters) - { - details.emplace_back(L"Adapter"); - - details.emplace_back(std::wstring(L" Guid: ").append(adapter.guid)); - details.emplace_back(std::wstring(L" Name: ").append(adapter.name)); - details.emplace_back(std::wstring(L" Alias: ").append(adapter.alias)); - } - - PluginLogWithDetails(description, details); -} - -} // anonymous namespace - -namespace driverlogic -{ - -std::wstring GetNetCfgInstanceId(HDEVINFO devInfo, const SP_DEVINFO_DATA &devInfoData) -{ - HKEY hNet = SetupDiOpenDevRegKey( - devInfo, - const_cast<SP_DEVINFO_DATA *>(&devInfoData), - DICS_FLAG_GLOBAL, - 0, - DIREG_DRV, - KEY_READ - ); - - if (hNet == INVALID_HANDLE_VALUE) - { - THROW_WINDOWS_ERROR(GetLastError(), "SetupDiOpenDevRegKey"); - } - - std::vector<wchar_t> instanceId(MAX_PATH + sizeof(L'\0')); - DWORD strSize = instanceId.size() * sizeof(wchar_t); - - const auto status = RegGetValueW( - hNet, - nullptr, - L"NetCfgInstanceId", - RRF_RT_REG_SZ, - nullptr, - instanceId.data(), - &strSize - ); - - RegCloseKey(hNet); - - if (ERROR_SUCCESS != status) - { - THROW_WINDOWS_ERROR(status, "RegGetValueW"); - } - - instanceId[strSize / sizeof(wchar_t)] = L'\0'; - - return instanceId.data(); -} - -std::wstring GetDeviceInstanceId( - HDEVINFO devInfo, - SP_DEVINFO_DATA* devInfoData -) -{ - DWORD requiredSize = 0; - - SetupDiGetDeviceInstanceIdW( - devInfo, - devInfoData, - nullptr, - 0, - &requiredSize - ); - - std::vector<wchar_t> deviceInstanceId; - deviceInstanceId.resize(1 + requiredSize * sizeof(wchar_t)); - - const auto status = SetupDiGetDeviceInstanceIdW( - devInfo, - devInfoData, - &deviceInstanceId[0], - deviceInstanceId.size(), - nullptr - ); - - if (FALSE == status) - { - THROW_WINDOWS_ERROR(GetLastError(), "SetupDiGetDeviceInstanceIdW() failed"); - } - - return deviceInstanceId.data(); -} - -std::wstring GetDeviceStringProperty( - HDEVINFO devInfo, - SP_DEVINFO_DATA *devInfoData, - const DEVPROPKEY *property -) -{ - // - // Obtain required buffer size - // - - DWORD requiredSize = 0; - DEVPROPTYPE type; - - const auto sizeStatus = SetupDiGetDevicePropertyW( - devInfo, - devInfoData, - property, - &type, - nullptr, - 0, - &requiredSize, - 0 - ); - - if (FALSE == sizeStatus) - { - const auto lastError = GetLastError(); - - if (ERROR_INSUFFICIENT_BUFFER != lastError) - { - THROW_WINDOWS_ERROR(lastError, "SetupDiGetDevicePropertyW"); - } - } - - std::vector<wchar_t> buffer; - buffer.resize(1 + requiredSize / sizeof(wchar_t)); - - // - // Read property - // - - const auto status = SetupDiGetDevicePropertyW( - devInfo, - devInfoData, - property, - &type, - reinterpret_cast<PBYTE>(&buffer[0]), - buffer.size() * sizeof(wchar_t), - nullptr, - 0 - ); - - if (FALSE == status) - { - THROW_WINDOWS_ERROR(GetLastError(), "Failed to read device property"); - } - - return buffer.data(); -} - -std::optional<std::wstring> GetDeviceRegistryStringProperty( - HDEVINFO devInfo, - SP_DEVINFO_DATA *devInfoData, - DWORD property -) -{ - // - // Obtain required buffer size - // - - DWORD requiredSize = 0; - - const auto sizeStatus = SetupDiGetDeviceRegistryPropertyW( - devInfo, - devInfoData, - property, - nullptr, - nullptr, - 0, - &requiredSize - ); - - const DWORD lastError = GetLastError(); - if (FALSE == sizeStatus && ERROR_INSUFFICIENT_BUFFER != lastError) - { - // ERROR_INVALID_DATA may mean that the property does not exist - // TODO: Check if there may be other causes. - if (ERROR_INVALID_DATA != lastError) - { - THROW_WINDOWS_ERROR(lastError, "SetupDiGetDeviceRegistryPropertyW"); - } - - return std::nullopt; - } - - // - // Read property - // - - std::vector<wchar_t> buffer; - buffer.resize(1 + requiredSize / sizeof(wchar_t)); - - const auto status = SetupDiGetDeviceRegistryPropertyW( - devInfo, - devInfoData, - property, - nullptr, - reinterpret_cast<PBYTE>(&buffer[0]), - buffer.size() * sizeof(wchar_t), - nullptr - ); - - if (FALSE == status) - { - THROW_WINDOWS_ERROR(GetLastError(), "Failed to read device property"); - } - - return { buffer.data() }; -} - -std::set<NetworkAdapter> GetTapAdapters(const std::wstring &tapHardwareId) -{ - std::set<NetworkAdapter> adapters; - - HDEVINFO devInfo = SetupDiGetClassDevs( - &GUID_DEVCLASS_NET, - nullptr, - nullptr, - DIGCF_PRESENT - ); - - if (INVALID_HANDLE_VALUE == devInfo) - { - THROW_WINDOWS_ERROR(GetLastError(), "SetupDiGetClassDevs() failed"); - } - - common::memory::ScopeDestructor scopeDestructor; - scopeDestructor += [devInfo]() - { - SetupDiDestroyDeviceInfoList(devInfo); - }; - - common::network::Nci nci; - - for (int memberIndex = 0; ; memberIndex++) - { - SP_DEVINFO_DATA devInfoData = { 0 }; - devInfoData.cbSize = sizeof(devInfoData); - - if (FALSE == SetupDiEnumDeviceInfo(devInfo, memberIndex, &devInfoData)) - { - const auto lastError = GetLastError(); - - if (ERROR_NO_MORE_ITEMS == lastError) - { - // Done - break; - } - - THROW_WINDOWS_ERROR(lastError, "SetupDiEnumDeviceInfo() failed while enumerating network adapters"); - } - - try - { - // - // Check whether this is a TAP adapter - // - - const auto hardwareId = GetDeviceRegistryStringProperty(devInfo, &devInfoData, SPDRP_HARDWAREID); - if (!hardwareId.has_value() - || wcscmp(hardwareId.value().c_str(), tapHardwareId.c_str()) != 0) - { - continue; - } - - // - // Construct NetworkAdapter - // - - const std::wstring guid = GetNetCfgInstanceId(devInfo, devInfoData); - GUID guidObj = common::Guid::FromString(guid); - - adapters.emplace(NetworkAdapter( - guid, - GetDeviceStringProperty(devInfo, &devInfoData, &DEVPKEY_Device_DriverDesc), - nci.getConnectionName(guidObj), - GetDeviceInstanceId(devInfo, &devInfoData) - )); - } - catch (const std::exception &e) - { - // - // Log exception and skip this adapter - // - - const auto msg = - std::string("Skipping TAP adapter due to exception caught while iterating: ").append(e.what()); - PluginLog(common::string::ToWide(msg)); - } - } - - return adapters; -} - -std::optional<NetworkAdapter> FindMullvadAdapter(const std::set<NetworkAdapter> &tapAdapters) -{ - if (tapAdapters.empty()) - { - return std::nullopt; - } - - // - // Look for TAP adapter with alias "Mullvad". - // - - auto findByAlias = [](const std::set<NetworkAdapter> &adapters, const std::wstring &alias) - { - const auto it = std::find_if(adapters.begin(), adapters.end(), [&alias](const NetworkAdapter &candidate) - { - return 0 == _wcsicmp(candidate.alias.c_str(), alias.c_str()); - }); - - return it; - }; - - static const wchar_t baseAlias[] = L"Mullvad"; - - const auto mullvadAdapter = findByAlias(tapAdapters, baseAlias); - - if (tapAdapters.end() != mullvadAdapter) - { - return { *mullvadAdapter }; - } - - // - // Look for TAP adapter with alias "Mullvad-1", "Mullvad-2", etc. - // - - for (auto i = 0; i < 10; ++i) - { - std::wstringstream ss; - - ss << baseAlias << L"-" << i; - - const auto alias = ss.str(); - - const auto mullvadAdapter = findByAlias(tapAdapters, alias); - - if (tapAdapters.end() != mullvadAdapter) - { - return { *mullvadAdapter }; - } - } - - return std::nullopt; -} - -NetworkAdapter GetAdapter() -{ - std::set<NetworkAdapter> added = GetTapAdapters(TAP_HARDWARE_ID); - - if (added.empty()) - { - THROW_ERROR("Could not identify TAP"); - } - else if (added.size() > 1) - { - LogAdapters(L"Enumerable network TAP adapters", added); - - THROW_ERROR("Identified more TAP adapters than expected"); - } - - return *added.begin(); -} - -DeletionResult DeleteOldMullvadAdapter() -{ - auto tapAdapters = GetTapAdapters(DEPRECATED_TAP_HARDWARE_ID); - std::optional<NetworkAdapter> mullvadAdapter = FindMullvadAdapter(tapAdapters); - - if (!mullvadAdapter.has_value()) - { - THROW_ERROR("Mullvad TAP adapter not found"); - } - - const auto mullvadGuid = mullvadAdapter.value().guid; - - HDEVINFO devInfo = SetupDiGetClassDevsW( - &GUID_DEVCLASS_NET, - nullptr, - nullptr, - DIGCF_PRESENT - ); - - if (INVALID_HANDLE_VALUE == devInfo) - { - THROW_WINDOWS_ERROR(GetLastError(), "SetupDiGetClassDevsW() failed"); - } - - common::memory::ScopeDestructor cleanupDevList; - cleanupDevList += [&devInfo]() - { - SetupDiDestroyDeviceInfoList(devInfo); - }; - - int numRemainingAdapters = 0; - - for (int memberIndex = 0; ; memberIndex++) - { - SP_DEVINFO_DATA devInfoData = { 0 }; - devInfoData.cbSize = sizeof(devInfoData); - - if (FALSE == SetupDiEnumDeviceInfo(devInfo, memberIndex, &devInfoData)) - { - const auto lastError = GetLastError(); - - if (ERROR_NO_MORE_ITEMS == lastError) - { - break; - } - - THROW_WINDOWS_ERROR(lastError, "Error enumerating network adapters"); - } - - try - { - const auto hardwareId = GetDeviceRegistryStringProperty(devInfo, &devInfoData, SPDRP_HARDWAREID); - - if (!hardwareId.has_value()) - { - continue; - } - if (0 != wcscmp(DEPRECATED_TAP_HARDWARE_ID, hardwareId.value().data())) - { - continue; - } - if (0 != GetNetCfgInstanceId(devInfo, devInfoData).compare(mullvadGuid)) - { - numRemainingAdapters++; - continue; - } - - if (FALSE == SetupDiRemoveDevice( - devInfo, - &devInfoData - )) - { - THROW_WINDOWS_ERROR(GetLastError(), "Error removing Mullvad TAP device"); - } - } - catch (const std::exception & e) - { - // - // Log exception and skip this adapter - // - - const auto msg = - std::string("Skipping TAP adapter due to exception caught while iterating: ").append(e.what()); - PluginLog(common::string::ToWide(msg)); - } - } - - return (numRemainingAdapters > 0) - ? DeletionResult::SOME_REMAINING_TAP_ADAPTERS - : DeletionResult::NO_REMAINING_TAP_ADAPTERS; -} - -} diff --git a/windows/nsis-plugins/src/driverlogic/driverlogicops.h b/windows/nsis-plugins/src/driverlogic/driverlogicops.h deleted file mode 100644 index c56ff60472..0000000000 --- a/windows/nsis-plugins/src/driverlogic/driverlogicops.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#include <set> -#include <string> -#include <optional> - -namespace driverlogic -{ - -struct NetworkAdapter -{ - std::wstring guid; - std::wstring name; - std::wstring alias; - std::wstring deviceInstanceId; - - NetworkAdapter(std::wstring guid, std::wstring name, std::wstring alias, std::wstring deviceInstanceId) - : guid(guid) - , name(name) - , alias(alias) - , deviceInstanceId(deviceInstanceId) - { - } - - bool operator<(const NetworkAdapter &rhs) const - { - return _wcsicmp(deviceInstanceId.c_str(), rhs.deviceInstanceId.c_str()) < 0; - } -}; - -// -// Identify the Mullvad TAP adapter -// -NetworkAdapter GetAdapter(); - -enum class DeletionResult -{ - NO_REMAINING_TAP_ADAPTERS, - SOME_REMAINING_TAP_ADAPTERS -}; - -DeletionResult DeleteOldMullvadAdapter(); - -std::optional<NetworkAdapter> FindMullvadAdapter(const std::set<NetworkAdapter> &tapAdapters); - -} diff --git a/windows/nsis-plugins/src/driverlogic/stdafx.cpp b/windows/nsis-plugins/src/driverlogic/stdafx.cpp deleted file mode 100644 index 3b6341d106..0000000000 --- a/windows/nsis-plugins/src/driverlogic/stdafx.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// stdafx.cpp : source file that includes just the standard includes -// driverlogic.pch will be the pre-compiled header -// stdafx.obj will contain the pre-compiled type information - -#include "stdafx.h" - -// TODO: reference any additional headers you need in STDAFX.H -// and not in this file diff --git a/windows/nsis-plugins/src/driverlogic/stdafx.h b/windows/nsis-plugins/src/driverlogic/stdafx.h deleted file mode 100644 index f3a07375c7..0000000000 --- a/windows/nsis-plugins/src/driverlogic/stdafx.h +++ /dev/null @@ -1,16 +0,0 @@ -// stdafx.h : include file for standard system include files, -// or project specific include files that are used frequently, but -// are changed infrequently -// - -#pragma once - -#include "targetver.h" - -#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers -// Windows Header Files: -#include <windows.h> - - - -// TODO: reference additional headers your program requires here diff --git a/windows/nsis-plugins/src/driverlogic/targetver.h b/windows/nsis-plugins/src/driverlogic/targetver.h deleted file mode 100644 index ae4a5c032c..0000000000 --- a/windows/nsis-plugins/src/driverlogic/targetver.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once - -// Including SDKDDKVer.h defines the highest available Windows platform. - -// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and -// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. - -#include <WinSDKVer.h> - -#define _WIN32_WINNT _WIN32_WINNT_WIN7 - -#include <SDKDDKVer.h> |
