windows_erg/process/mod.rs
1//! Process operations and management.
2//!
3//! This module provides ergonomic access to Windows process APIs including:
4//! - Opening and querying processes
5//! - Reading PEB (Process Environment Block) data
6//! - Enumerating threads and modules
7//! - Process tree operations
8//! - Memory information
9//!
10//! # Examples
11//!
12//! ## Opening and querying a process
13//!
14//! ```no_run
15//! use windows_erg::process::{Process, ProcessId};
16//!
17//! # fn main() -> windows_erg::Result<()> {
18//! let process = Process::open(ProcessId::new(1234))?;
19//! println!("Process name: {}", process.name()?);
20//! println!("Process path: {}", process.path()?.display());
21//! # Ok(())
22//! # }
23//! ```
24//!
25//! ## Reading PEB data
26//!
27//! ```no_run
28//! use windows_erg::process::Process;
29//!
30//! # fn main() -> windows_erg::Result<()> {
31//! let process = Process::current();
32//! println!("Command line: {}", process.command_line()?);
33//!
34//! let env = process.environment()?;
35//! for (key, value) in env {
36//! println!("{} = {}", key, value);
37//! }
38//! # Ok(())
39//! # }
40//! ```
41//!
42//! ## Listing all processes
43//!
44//! ```no_run
45//! use windows_erg::process::Process;
46//!
47//! # fn main() -> windows_erg::Result<()> {
48//! let processes = Process::list()?;
49//! for proc in processes {
50//! println!("{}: {}", proc.pid, proc.name);
51//! }
52//! # Ok(())
53//! # }
54//! ```
55//!
56//! ## Using buffer reuse for performance
57//!
58//! ```no_run
59//! use windows_erg::process::Process;
60//!
61//! # fn main() -> windows_erg::Result<()> {
62//! let processes = Process::list()?;
63//! let mut buffer = Vec::with_capacity(8192);
64//!
65//! for proc_info in processes {
66//! if let Ok(process) = Process::open(proc_info.pid) {
67//! if let Ok(cmd) = process.command_line_with_buffer(&mut buffer) {
68//! println!("{}: {}", proc_info.name, cmd);
69//! }
70//! }
71//! }
72//! # Ok(())
73//! # }
74//! ```
75//!
76//! ## Process tree operations
77//!
78//! ```no_run
79//! use windows_erg::process::{Process, ProcessId};
80//!
81//! # fn main() -> windows_erg::Result<()> {
82//! // Kill a process and all its children
83//! let process = Process::open(ProcessId::new(1234))?;
84//! process.kill_tree()?;
85//!
86//! // Or kill entire tree from root ancestor
87//! Process::kill_tree_from_root(ProcessId::new(1234))?;
88//! # Ok(())
89//! # }
90//! ```
91
92mod inject;
93mod list;
94mod memory;
95mod metrics;
96mod modules;
97mod peb;
98mod processes;
99mod spawn;
100mod threads;
101mod tree;
102mod types;
103
104// Re-export public types
105pub use processes::Process;
106pub use spawn::{ProcessSpawner, SpawnedProcess};
107pub use types::{
108 HostMemoryMetrics, HostMetrics, MemoryInfo, ModuleInfo, ProcessAccess, ProcessCpuTimes,
109 ProcessId, ProcessInfo, ProcessMemoryMetrics, ProcessMetrics, ProcessParameters, ThreadId,
110 ThreadInfo,
111};
112
113pub use metrics::{host_cpu_usage, host_metrics};