summaryrefslogtreecommitdiffhomepage
path: root/windows/driverlogic/src/util.cpp
diff options
context:
space:
mode:
authorOdd Stranne <odd@mullvad.net>2021-03-17 18:06:16 +0100
committerOdd Stranne <odd@mullvad.net>2021-07-02 16:31:31 +0200
commit15be4405fcbe845f806d0e2a50c4e948e049d0d5 (patch)
tree869d26d02bad41af6c6bff61d0831ce3705edabc /windows/driverlogic/src/util.cpp
parent79f52b5adc0d965e1688bb1253a6c782bf74f03f (diff)
downloadmullvadvpn-15be4405fcbe845f806d0e2a50c4e948e049d0d5.tar.xz
mullvadvpn-15be4405fcbe845f806d0e2a50c4e948e049d0d5.zip
Restructure and extend driverlogic
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);
+ }
+}