summaryrefslogtreecommitdiffhomepage
path: root/windows/driverlogic/src/util.cpp
diff options
context:
space:
mode:
authorOdd Stranne <odd@mullvad.net>2021-07-02 16:35:15 +0200
committerOdd Stranne <odd@mullvad.net>2021-07-02 16:35:15 +0200
commit50151b8e6372cefc7b64373272ee752a23bb62af (patch)
tree13a22acab97121121745094e0055e2604ece5a4a /windows/driverlogic/src/util.cpp
parent5e84acd90903797e5608648c8539532a30598243 (diff)
parent25bb2de9c16d88fd766c7546fc5fb0ba036f5a05 (diff)
downloadmullvadvpn-50151b8e6372cefc7b64373272ee752a23bb62af.tar.xz
mullvadvpn-50151b8e6372cefc7b64373272ee752a23bb62af.zip
Merge branch 'split-tunnel-win-installer'
Diffstat (limited to 'windows/driverlogic/src/util.cpp')
-rw-r--r--windows/driverlogic/src/util.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/windows/driverlogic/src/util.cpp b/windows/driverlogic/src/util.cpp
new file mode 100644
index 0000000000..ebce6d82cb
--- /dev/null
+++ b/windows/driverlogic/src/util.cpp
@@ -0,0 +1,36 @@
+#include "stdafx.h"
+#include "util.h"
+#include <windows.h>
+#include <vector>
+#include <libcommon/error.h>
+
+using path = std::filesystem::path;
+
+path
+GetProcessModulePath
+(
+)
+{
+ size_t bufferSize = MAX_PATH;
+
+ std::vector<wchar_t> pathBuffer(bufferSize);
+
+ for (;;)
+ {
+ const auto writtenChars = GetModuleFileNameW(nullptr, &pathBuffer[0], static_cast<DWORD>(pathBuffer.size()));
+
+ if (0 == writtenChars)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "GetModuleFileNameW");
+ }
+
+ if (writtenChars != pathBuffer.size())
+ {
+ return path(pathBuffer.begin(), pathBuffer.begin() + writtenChars);
+ }
+
+ bufferSize *= 2;
+
+ pathBuffer.resize(bufferSize);
+ }
+}