basic_process_list/
basic-process-list.rs1use isr::cache::IsrCache;
5use vmi::{
6 VcpuId, VmiCore, VmiSession,
7 arch::amd64::Amd64,
8 driver::xen::VmiXenDriver,
9 os::{VmiOsProcess as _, windows::WindowsOs},
10};
11use xen::XenStore;
12
13fn main() -> Result<(), Box<dyn std::error::Error>> {
14 let domain_id = 'x: {
15 for name in &["win7", "win10", "win11", "ubuntu22"] {
16 if let Some(domain_id) = XenStore::new()?.domain_id_from_name(name)? {
17 break 'x domain_id;
18 }
19 }
20
21 panic!("Domain not found");
22 };
23
24 let driver = VmiXenDriver::<Amd64>::new(domain_id)?;
26 let core = VmiCore::new(driver)?;
27
28 let kernel_info = {
31 let _pause_guard = core.pause_guard()?;
33
34 let registers = core.registers(VcpuId(0))?;
36
37 WindowsOs::find_kernel(&core, ®isters)?.expect("kernel information")
46 };
47
48 let isr = IsrCache::new("cache")?;
51 let entry = isr.entry_from_codeview(kernel_info.codeview)?;
52 let profile = entry.profile()?;
53
54 tracing::info!("Creating VMI session");
56 let os = WindowsOs::<VmiXenDriver<Amd64>>::new(&profile)?;
57 let session = VmiSession::new(&core, &os);
58
59 let _pause_guard = session.pause_guard()?;
61
62 let registers = session.registers(VcpuId(0))?;
64 let vmi = session.with_registers(®isters);
65
66 for process in vmi.os().processes()? {
68 let process = process?;
69
70 println!(
71 "{} [{}] {} (root @ {})",
72 process.object()?,
73 process.id()?,
74 process.name()?,
75 process.translation_root()?
76 );
77 }
78
79 Ok(())
80}