aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2021-05-16 02:03:49 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2021-05-16 02:11:38 +0300
commita1a531212aa1b73e5cfbf503e59cd5ae28370ccc (patch)
tree3eb1d92c9816b7bf492f9b9d69d38a6bbe906ac7
parentexport pdb::file to winapi-common's File (diff)
downloadwinapi-debug-a1a531212aa1b73e5cfbf503e59cd5ae28370ccc.tar.gz
winapi-debug-a1a531212aa1b73e5cfbf503e59cd5ae28370ccc.zip
export Process to winapi-common
m---------3rdparty/winapi/common0
-rw-r--r--include/pdb/all.hpp2
-rw-r--r--include/pdb/handle.hpp29
-rw-r--r--include/pdb/process.hpp38
-rw-r--r--src/process.cpp130
5 files changed, 0 insertions, 199 deletions
diff --git a/3rdparty/winapi/common b/3rdparty/winapi/common
-Subproject 23aa1a5c37677a38873dc627f4b8077e0390f42
+Subproject bfdf5415b5e025d795a1a7ee89946b00708f50b
diff --git a/include/pdb/all.hpp b/include/pdb/all.hpp
index 3e6c3e8..968e85d 100644
--- a/include/pdb/all.hpp
+++ b/include/pdb/all.hpp
@@ -8,8 +8,6 @@
#include "address.hpp"
#include "call_stack.hpp"
#include "dbghelp.hpp"
-#include "handle.hpp"
#include "module.hpp"
-#include "process.hpp"
#include "repo.hpp"
#include "symbol.hpp"
diff --git a/include/pdb/handle.hpp b/include/pdb/handle.hpp
deleted file mode 100644
index 319a581..0000000
--- a/include/pdb/handle.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2017 Egor Tensin <Egor.Tensin@gmail.com>
-// This file is part of the "winapi-debug" project.
-// For details, see https://github.com/egor-tensin/winapi-debug.
-// Distributed under the MIT License.
-
-#pragma once
-
-#include "workarounds.hpp"
-
-#include <windows.h>
-
-#include <cassert>
-#include <memory>
-
-namespace pdb {
-
-struct CloseHandle {
- void operator()(HANDLE raw) const {
- if (raw == NULL || raw == INVALID_HANDLE_VALUE)
- return;
- const auto ret = ::CloseHandle(raw);
- assert(ret);
- PDB_UNUSED_PARAMETER(ret);
- }
-};
-
-typedef std::unique_ptr<void, CloseHandle> Handle;
-
-} // namespace pdb
diff --git a/include/pdb/process.hpp b/include/pdb/process.hpp
deleted file mode 100644
index 7639536..0000000
--- a/include/pdb/process.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2020 Egor Tensin <Egor.Tensin@gmail.com>
-// This file is part of the "winapi-debug" project.
-// For details, see https://github.com/egor-tensin/winapi-debug.
-// Distributed under the MIT License.
-
-#pragma once
-
-#include "handle.hpp"
-
-#include <windows.h>
-
-#include <string>
-
-namespace pdb {
-
-class Process {
-public:
- using ID = DWORD;
-
- static Process current();
- static Process open(ID);
-
- ID get_id() const { return id; }
-
- const Handle& get_handle() const { return handle; }
-
- std::string get_executable_path() const;
- static std::string get_executable_path(const Handle&);
-
-private:
- explicit Process(Handle&&);
- Process(ID, Handle&&);
-
- ID id;
- Handle handle;
-};
-
-} // namespace pdb
diff --git a/src/process.cpp b/src/process.cpp
deleted file mode 100644
index 7763720..0000000
--- a/src/process.cpp
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright (c) 2020 Egor Tensin <Egor.Tensin@gmail.com>
-// This file is part of the "winapi-debug" project.
-// For details, see https://github.com/egor-tensin/winapi-debug.
-// Distributed under the MIT License.
-
-#include <pdb/all.hpp>
-
-#include <winapi/error.hpp>
-#include <winapi/utf8.hpp>
-
-#include <windows.h>
-
-#include <limits>
-#include <stdexcept>
-#include <string>
-#include <utility>
-#include <vector>
-
-namespace pdb {
-namespace {
-
-// Permissions required for MiniDumpWriteDump.
-constexpr DWORD permissions = PROCESS_QUERY_INFORMATION | PROCESS_VM_READ;
-
-Handle open_process(DWORD id) {
- Handle process{OpenProcess(permissions, FALSE, id)};
- if (!process) {
- throw winapi::error::windows(GetLastError(), "OpenProcess");
- }
- return process;
-}
-
-class PathBuffer {
-public:
- PathBuffer() : size{min_size} { data.resize(size); }
-
- DWORD get_size() const { return size; }
-
- wchar_t* get_data() { return data.data(); }
-
- void grow() {
- if (size < min_size) {
- size = min_size;
- } else {
- // Check if we can still multiply by two.
- if (std::numeric_limits<decltype(size)>::max() - size < size)
- throw std::range_error{"couldn't allocate buffer sufficient for a file path"};
- size *= 2;
- }
- data.resize(size);
- }
-
-private:
- static constexpr DWORD min_size = 256;
-
- DWORD size;
- std::vector<wchar_t> data;
-};
-
-std::string get_current_executable_path(PathBuffer& buffer) {
- SetLastError(ERROR_SUCCESS);
-
- const auto ec = ::GetModuleFileNameW(NULL, buffer.get_data(), buffer.get_size());
-
- if (ec == 0) {
- throw winapi::error::windows(GetLastError(), "GetModuleFileNameW");
- }
-
- if (ec == buffer.get_size() && GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
- buffer.grow();
- return get_current_executable_path(buffer);
- }
-
- return winapi::narrow(buffer.get_data());
-}
-
-std::string get_current_executable_path() {
- PathBuffer buffer;
- return get_current_executable_path(buffer);
-}
-
-std::string get_executable_path(const Handle& process, PathBuffer& buffer) {
- auto size = buffer.get_size();
-
- const auto ec = ::QueryFullProcessImageNameW(process.get(), 0, buffer.get_data(), &size);
-
- if (ec != 0) {
- return winapi::narrow(buffer.get_data());
- }
-
- if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
- buffer.grow();
- return get_executable_path(process, buffer);
- }
-
- throw winapi::error::windows(GetLastError(), "QueryFullProcessImageNameW");
-}
-
-std::string get_executable_path(const Handle& process) {
- PathBuffer buffer;
- return get_executable_path(process, buffer);
-}
-
-} // namespace
-
-Process Process::current() {
- return Process{::GetCurrentProcessId(), Handle{::GetCurrentProcess()}};
-}
-
-Process Process::open(DWORD id) {
- return Process{id, open_process(id)};
-}
-
-Process::Process(Handle&& handle) : Process{::GetProcessId(handle.get()), std::move(handle)} {}
-
-Process::Process(ID id, Handle&& handle) : id{id}, handle{std::move(handle)} {}
-
-std::string Process::get_executable_path() const {
- return get_executable_path(handle);
-}
-
-std::string Process::get_executable_path(const Handle& handle) {
- if (handle.get() == ::GetCurrentProcess()) {
- return pdb::get_current_executable_path();
- } else {
- return pdb::get_executable_path(handle);
- }
-}
-
-} // namespace pdb