diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-08-13 17:06:57 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2021-09-28 12:41:47 +0200 |
| commit | ce84bcf44cd923f5d178c8a39eaec6eee8165e5f (patch) | |
| tree | 0fe0b776d5b4c3df0eece0ba010df450eb52c29c /windows/driverlogic/src/wireguard.h | |
| parent | 77eddaf311f1c77132b500dbc35d4f3af41c2069 (diff) | |
| download | mullvadvpn-ce84bcf44cd923f5d178c8a39eaec6eee8165e5f.tar.xz mullvadvpn-ce84bcf44cd923f5d178c8a39eaec6eee8165e5f.zip | |
Update installer for wgnt
Diffstat (limited to 'windows/driverlogic/src/wireguard.h')
| -rw-r--r-- | windows/driverlogic/src/wireguard.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/windows/driverlogic/src/wireguard.h b/windows/driverlogic/src/wireguard.h new file mode 100644 index 0000000000..5892b248f1 --- /dev/null +++ b/windows/driverlogic/src/wireguard.h @@ -0,0 +1,58 @@ +#pragma once + +#include <wireguard-nt/wireguard.h> +#include <libcommon/error.h> +#include "util.h" + +class WireGuardNtDll +{ +public: + + WireGuardNtDll() : dllHandle(nullptr) + { + auto path = GetProcessModulePath().replace_filename(L"wireguard.dll"); + dllHandle = LoadLibraryExW(path.c_str(), nullptr, LOAD_WITH_ALTERED_SEARCH_PATH); + + if (nullptr == dllHandle) + { + THROW_WINDOWS_ERROR(GetLastError(), "LoadLibraryExW"); + } + + try + { + deletePoolDriver = getProcAddressOrThrow<WIREGUARD_DELETE_POOL_DRIVER_FUNC*>("WireGuardDeletePoolDriver"); + } + catch (...) + { + FreeLibrary(dllHandle); + throw; + } + } + + ~WireGuardNtDll() + { + if (nullptr != dllHandle) + { + FreeLibrary(dllHandle); + } + } + + WIREGUARD_DELETE_POOL_DRIVER_FUNC *deletePoolDriver; + +private: + + template<typename T> + T getProcAddressOrThrow(const char *procName) + { + const T result = reinterpret_cast<T>(GetProcAddress(dllHandle, procName)); + + if (nullptr == result) + { + THROW_WINDOWS_ERROR(GetLastError(), "GetProcAddress"); + } + + return result; + } + + HMODULE dllHandle; +}; |
