diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2019-11-11 14:14:01 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-11-11 14:14:01 -0500 |
| commit | d6c3bad01a85c1a5b1a3bdd86efc85efdd4c5f29 (patch) | |
| tree | fddae0025e65bd1d5064bf8ad6fa73a23aa750e9 /src/envmodule.h | |
| parent | 7b3c5dcbb3b5d520d166eb5b51f669968f57302e (diff) | |
| parent | decd5c1828f495be4e230c9fc6fb79dd9bfdfb81 (diff) | |
Merge pull request #887 from isanae/spawning-and-waiting
Spawning, waiting and locking
Diffstat (limited to 'src/envmodule.h')
| -rw-r--r-- | src/envmodule.h | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/src/envmodule.h b/src/envmodule.h index deb7520f..d152b840 100644 --- a/src/envmodule.h +++ b/src/envmodule.h @@ -7,6 +7,23 @@ namespace env { +// used by HandlePtr, calls CloseHandle() as the deleter +// +struct HandleCloser +{ + using pointer = HANDLE; + + void operator()(HANDLE h) + { + if (h != INVALID_HANDLE_VALUE) { + ::CloseHandle(h); + } + } +}; + +using HandlePtr = std::unique_ptr<HANDLE, HandleCloser>; + + // represents one module // class Module @@ -101,25 +118,44 @@ private: class Process { public: - Process(DWORD pid, QString name); + Process(); + explicit Process(HANDLE h); + Process(DWORD pid, DWORD ppid, QString name); + bool isValid() const; DWORD pid() const; + DWORD ppid() const; const QString& name() const; + HandlePtr openHandleForWait() const; + // whether this process can be accessed; fails if the current process doesn't // have the proper permissions // bool canAccess() const; + void addChild(Process p); + std::vector<Process>& children(); + private: DWORD m_pid; - QString m_name; + mutable std::optional<DWORD> m_ppid; + mutable std::optional<QString> m_name; + std::vector<Process> m_children; }; std::vector<Process> getRunningProcesses(); std::vector<Module> getLoadedModules(); +Process getProcessTree(HANDLE parent); + +QString getProcessName(DWORD pid); +QString getProcessName(HANDLE process); + +DWORD getProcessParentID(DWORD pid); +DWORD getProcessParentID(HANDLE handle); + } // namespace env #endif // ENV_MODULE_H |
