mach_sys/
libproc.rs

1//! This module roughly corresponds to `libproc.h`.
2
3use crate::ffi::*;
4
5use crate::kern_return::kern_return_t;
6use crate::vm_types::{
7    integer_t,
8    mach_vm_address_t,
9    mach_vm_size_t,
10};
11
12pub const PROC_PIDPATHINFO_MAXSIZE: c_uint = 4096;
13pub const PROC_ALL_PIDS: u32 = 1;
14
15extern "C" {
16    pub fn proc_pidpath(pid: pid_t, buffer: *mut c_void, buffersize: c_uint) -> kern_return_t;
17    pub fn proc_regionfilename(
18        pid: pid_t,
19        address: c_ulong,
20        buffer: *mut c_void,
21        buffersize: c_uint,
22    ) -> kern_return_t;
23    pub fn proc_pidinfo(
24        pid: c_int,
25        flavor: c_int,
26        arg: u64,
27        buffer: *mut c_void,
28        buffersize: c_int,
29    ) -> c_int;
30    pub fn proc_listpids(
31        type_: u32,
32        typeinfo: u32,
33        buffer: *mut c_void,
34        buffersize: c_int,
35    ) -> c_int;
36    pub fn proc_listallpids(buffer: *mut c_void, buffersize: c_int) -> c_int;
37}
38
39#[repr(C)]
40#[derive(Copy, Clone, Debug, Default, Hash, PartialOrd, PartialEq, Eq, Ord)]
41pub struct proc_regioninfo {
42    pub pri_protection: u32,
43    pub pri_max_protection: u32,
44    pub pri_inheritance: u32,
45    pub pri_flags: u32,
46    pub pri_offset: u64,
47    pub pri_behavior: u32,
48    pub pri_user_wired_count: u32,
49    pub pri_user_tag: u32,
50    pub pri_pages_resident: u32,
51    pub pri_pages_shared_now_private: u32,
52    pub pri_pages_swapped_out: u32,
53    pub pri_pages_dirtied: u32,
54    pub pri_ref_count: u32,
55    pub pri_shadow_depth: u32,
56    pub pri_share_mode: u32,
57    pub pri_private_pages_resident: u32,
58    pub pri_shared_pages_resident: u32,
59    pub pri_obj_id: u32,
60    pub pri_depth: u32,
61    pub pri_address: u64,
62    pub pri_size: u64,
63}
64
65#[repr(C, packed(4))]
66#[derive(Copy, Clone, Debug, Default, Hash, PartialOrd, PartialEq, Eq, Ord)]
67pub struct task_vm_info {
68    pub virtual_size: mach_vm_size_t,
69    pub region_count: integer_t,
70    pub page_size: integer_t,
71    pub resident_size: mach_vm_size_t,
72    pub resident_size_peak: mach_vm_size_t,
73    pub device: mach_vm_size_t,
74    pub device_peak: mach_vm_size_t,
75    pub internal: mach_vm_size_t,
76    pub internal_peak: mach_vm_size_t,
77    pub external: mach_vm_size_t,
78    pub external_peak: mach_vm_size_t,
79    pub reusable: mach_vm_size_t,
80    pub reusable_peak: mach_vm_size_t,
81    pub purgeable_volatile_pmap: mach_vm_size_t,
82    pub purgeable_volatile_resident: mach_vm_size_t,
83    pub purgeable_volatile_virtual: mach_vm_size_t,
84    pub compressed: mach_vm_size_t,
85    pub compressed_peak: mach_vm_size_t,
86    pub compressed_lifetime: mach_vm_size_t,
87    pub phys_footprint: mach_vm_size_t,
88    pub min_address: mach_vm_address_t,
89    pub max_address: mach_vm_address_t,
90    pub ledger_phys_footprint_peak: i64,
91    pub ledger_purgeable_nonvolatile: i64,
92    pub ledger_purgeable_novolatile_compressed: i64,
93    pub ledger_purgeable_volatile: i64,
94    pub ledger_purgeable_volatile_compressed: i64,
95    pub ledger_tag_network_nonvolatile: i64,
96    pub ledger_tag_network_nonvolatile_compressed: i64,
97    pub ledger_tag_network_volatile: i64,
98    pub ledger_tag_network_volatile_compressed: i64,
99    pub ledger_tag_media_footprint: i64,
100    pub ledger_tag_media_footprint_compressed: i64,
101    pub ledger_tag_media_nofootprint: i64,
102    pub ledger_tag_media_nofootprint_compressed: i64,
103    pub ledger_tag_graphics_footprint: i64,
104    pub ledger_tag_graphics_footprint_compressed: i64,
105    pub ledger_tag_graphics_nofootprint: i64,
106    pub ledger_tag_graphics_nofootprint_compressed: i64,
107    pub ledger_tag_neural_footprint: i64,
108    pub ledger_tag_neural_footprint_compressed: i64,
109    pub ledger_tag_neural_nofootprint: i64,
110    pub ledger_tag_neural_nofootprint_compressed: i64,
111    pub limit_bytes_remaining: u64,
112    pub decompressions: integer_t,
113    pub ledger_swapins: i64,
114}