summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-01-31 13:42:51 +0100
committerDavid Lönnhager <david.l@mullvad.net>2020-02-03 09:13:29 +0100
commit7e01878a7a5863a5c6e01b2fe7b0fa0e62a1759a (patch)
treec1142c61ee54de1566061548522eed969cab7b46
parentd4a0af28bd98972a0cbb129b4fabdca292a73080 (diff)
downloadmullvadvpn-7e01878a7a5863a5c6e01b2fe7b0fa0e62a1759a.tar.xz
mullvadvpn-7e01878a7a5863a5c6e01b2fe7b0fa0e62a1759a.zip
Remove driverlogic plugin
-rw-r--r--windows/nsis-plugins/nsis-plugins.sln10
-rw-r--r--windows/nsis-plugins/src/driverlogic/dllmain.cpp11
-rw-r--r--windows/nsis-plugins/src/driverlogic/driverlogic.cpp115
-rw-r--r--windows/nsis-plugins/src/driverlogic/driverlogic.def6
-rw-r--r--windows/nsis-plugins/src/driverlogic/driverlogic.vcxproj124
-rw-r--r--windows/nsis-plugins/src/driverlogic/driverlogic.vcxproj.filters17
-rw-r--r--windows/nsis-plugins/src/driverlogic/driverlogicops.cpp498
-rw-r--r--windows/nsis-plugins/src/driverlogic/driverlogicops.h46
-rw-r--r--windows/nsis-plugins/src/driverlogic/stdafx.cpp8
-rw-r--r--windows/nsis-plugins/src/driverlogic/stdafx.h16
-rw-r--r--windows/nsis-plugins/src/driverlogic/targetver.h12
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>