| 28 | } |
| 29 | |
| 30 | std::wstring get_process_module_path(HANDLE process) { |
| 31 | HMODULE module = nullptr; |
| 32 | DWORD bytes_needed = 0; |
| 33 | if (!::EnumProcessModules(process, &module, sizeof(module), &bytes_needed)) |
| 34 | return L""; |
| 35 | |
| 36 | std::vector<wchar_t> buffer(1024, L'\0'); |
| 37 | for (;;) { |
| 38 | const DWORD copied = ::GetModuleFileNameExW(process, module, buffer.data(), static_cast<DWORD>(buffer.size())); |
| 39 | if (copied == 0) |
| 40 | return L""; |
| 41 | if (copied < buffer.size() - 1) |
| 42 | return std::wstring(buffer.data(), copied); |
| 43 | buffer.assign(buffer.size() * 2, L'\0'); |
| 44 | } |
| 45 | } |
| 46 | |
| 47 | std::wstring find_process_name(DWORD pid) { |
| 48 | PROCESSENTRY32 pe32 = {sizeof(PROCESSENTRY32)}; |
no test coverage detected