diff options
| author | a1xd <[email protected]> | 2020-12-02 05:00:57 -0500 |
|---|---|---|
| committer | a1xd <[email protected]> | 2020-12-02 05:00:57 -0500 |
| commit | 9bcfbd0687565b58ab2b955a37d9edab76f90a20 (patch) | |
| tree | 95bd44222af29e7db4d5b8bbef8b6008a2e80047 /common/utility-install.hpp | |
| parent | refactor io (diff) | |
| download | rawaccel-9bcfbd0687565b58ab2b955a37d9edab76f90a20.tar.xz rawaccel-9bcfbd0687565b58ab2b955a37d9edab76f90a20.zip | |
merge common-install with common
Diffstat (limited to 'common/utility-install.hpp')
| -rw-r--r-- | common/utility-install.hpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/common/utility-install.hpp b/common/utility-install.hpp new file mode 100644 index 0000000..e1823e4 --- /dev/null +++ b/common/utility-install.hpp @@ -0,0 +1,46 @@ +#pragma once + +#include <filesystem> +#include <Windows.h> + +#include "external/WinReg.hpp" + +namespace fs = std::filesystem; +namespace wr = winreg; + +inline const std::wstring DRIVER_NAME = L"rawaccel"; +inline const std::wstring DRIVER_FILE_NAME = DRIVER_NAME + L".sys"; + +fs::path get_sys_path() { + std::wstring path; + path.resize(MAX_PATH); + + UINT chars_copied = GetSystemDirectoryW(path.data(), MAX_PATH); + if (chars_copied == 0) throw std::runtime_error("GetSystemDirectory failed"); + + path.resize(chars_copied); + return path; +} + +fs::path get_target_path() { + return get_sys_path() / L"drivers" / DRIVER_FILE_NAME; +} + +fs::path make_temp_path(const fs::path& p) { + auto tmp_path = p; + tmp_path.concat(".tmp"); + return tmp_path; +} + +template<typename Func> +void modify_upper_filters(Func fn) { + const std::wstring FILTERS_NAME = L"UpperFilters"; + wr::RegKey key( + HKEY_LOCAL_MACHINE, + L"SYSTEM\\CurrentControlSet\\Control\\Class\\{4d36e96f-e325-11ce-bfc1-08002be10318}" + ); + + std::vector<std::wstring> filters = key.GetMultiStringValue(FILTERS_NAME); + fn(filters); + key.SetMultiStringValue(FILTERS_NAME, filters); +} |