diff options
| author | Odd Stranne <odd@mullvad.net> | 2021-03-17 18:06:16 +0100 |
|---|---|---|
| committer | Odd Stranne <odd@mullvad.net> | 2021-07-02 16:31:31 +0200 |
| commit | 15be4405fcbe845f806d0e2a50c4e948e049d0d5 (patch) | |
| tree | 869d26d02bad41af6c6bff61d0831ce3705edabc /windows/driverlogic/src/util.cpp | |
| parent | 79f52b5adc0d965e1688bb1253a6c782bf74f03f (diff) | |
| download | mullvadvpn-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.cpp | 36 |
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); + } +} |
