1use core::mem::size_of;
4use crate::ffi::c_uint;
5
6use crate::vm_types::{
7 integer_t,
8 natural_t,
9 mach_vm_address_t,
10 mach_vm_size_t,
11};
12use crate::message::mach_msg_type_number_t;
13
14pub const TASK_INFO_MAX: c_uint = 1024;
15pub const TASK_BASIC_INFO_32: c_uint = 4;
16pub const TASK_BASIC2_INFO_32: c_uint = 6; pub mod x86 {
19 pub const TASK_BASIC_INFO_64: super::c_uint = 5;
20}
21pub mod arm {
22 pub const TASK_BASIC_INFO_64: super::c_uint = 18;
23}
24
25#[cfg(target_arch = "x86_64")]
26pub use x86::*;
27
28#[cfg(target_arch = "aarch64")]
29pub use arm::*;
30
31#[cfg(target_pointer_width = "32")]
32pub use TASK_BASIC_INFO_32 as TASK_BASIC_INFO;
33
34#[cfg(target_pointer_width = "64")]
35pub use TASK_BASIC_INFO_64 as TASK_BASIC_INFO;
36
37pub const TASK_EVENTS_INFO: c_uint = 2;
38pub const TASK_THREAD_TIMES_INFO: c_uint = 3;
39pub const TASK_ABSOLUTETIME_INFO: c_uint = 1;
40pub const TASK_KERNELMEMORY_INFO: c_uint = 7;
41pub const TASK_SECURITY_TOKEN: c_uint = 13;
42pub const TASK_AUDIT_TOKEN: c_uint = 15;
43pub const TASK_AFFINITY_TAG_INFO: c_uint = 16;
44pub const TASK_DYLD_INFO: c_uint = 17;
45pub const TASK_DYLD_ALL_IMAGE_INFO_32: c_uint = 0;
46pub const TASK_DYLD_ALL_IMAGE_INFO_64: c_uint = 1;
47pub const TASK_EXTMOD_INFO: c_uint = 19;
48pub const MACH_TASK_BASIC_INFO: c_uint = 20;
49pub const TASK_POWER_INFO: c_uint = 21;
50pub const TASK_VM_INFO: c_uint = 22;
51pub const TASK_VM_INFO_PURGEABLE: c_uint = 23;
52pub const TASK_TRACE_MEMORY_INFO: c_uint = 24;
53pub const TASK_WAIT_STATE_INFO: c_uint = 25;
54pub const TASK_POWER_INFO_V2: c_uint = 26;
55pub const TASK_VM_INFO_PURGEABLE_ACCOUNT: c_uint = 27;
56pub const TASK_FLAGS_INFO: c_uint = 28;
57pub const TASK_DEBUG_INFO_INTERNAL: c_uint = 29;
58
59pub type task_info_t = *mut integer_t;
60pub type task_flavor_t = natural_t;
61
62pub type task_vm_info_t = task_vm_info_rev5_t;
63pub type task_vm_info = task_vm_info_t;
64pub use TASK_VM_INFO_REV5_COUNT as TASK_VM_INFO_COUNT;
65
66pub const TASK_VM_INFO_REV5_COUNT: mach_msg_type_number_t = (size_of::<task_vm_info_rev5_t>() / size_of::<natural_t>() ) as _;
67pub const TASK_VM_INFO_REV4_COUNT: mach_msg_type_number_t = TASK_VM_INFO_REV5_COUNT - 1;
68pub const TASK_VM_INFO_REV3_COUNT: mach_msg_type_number_t = TASK_VM_INFO_REV4_COUNT - 2;
69pub const TASK_VM_INFO_REV2_COUNT: mach_msg_type_number_t = TASK_VM_INFO_REV3_COUNT - 42;
70pub const TASK_VM_INFO_REV1_COUNT: mach_msg_type_number_t = TASK_VM_INFO_REV2_COUNT - 4;
71pub const TASK_VM_INFO_REV0_COUNT: mach_msg_type_number_t = TASK_VM_INFO_REV1_COUNT - 2;
72
73#[repr(C, packed(4))]
105#[derive(
106 Copy, Clone,
107 Debug, Default,
108 Hash,
109 PartialOrd, Ord,
110 PartialEq, Eq,
111)]
112pub struct task_vm_info_rev0_t {
113 pub virtual_size: mach_vm_size_t,
115
116 pub region_count: integer_t,
118
119 pub page_size: integer_t,
121
122 pub resident_size: mach_vm_size_t,
124
125 pub resident_size_peak: mach_vm_size_t,
127
128 pub device: mach_vm_size_t,
129 pub device_peak: mach_vm_size_t,
130 pub internal: mach_vm_size_t,
131 pub internal_peak: mach_vm_size_t,
132 pub external: mach_vm_size_t,
133 pub external_peak: mach_vm_size_t,
134 pub reusable: mach_vm_size_t,
135 pub reusable_peak: mach_vm_size_t,
136 pub purgeable_volatile_pmap: mach_vm_size_t,
137 pub purgeable_volatile_resident: mach_vm_size_t,
138 pub purgeable_volatile_virtual: mach_vm_size_t,
139 pub compressed: mach_vm_size_t,
140 pub compressed_peak: mach_vm_size_t,
141 pub compressed_lifetime: mach_vm_size_t,
142}
143
144#[repr(C, packed(4))]
145#[derive(
146 Copy, Clone,
147 Debug, Default,
148 Hash,
149 PartialOrd, Ord,
150 PartialEq, Eq,
151)]
152pub struct task_vm_info_rev1_t {
153 pub virtual_size: mach_vm_size_t,
155
156 pub region_count: integer_t,
158
159 pub page_size: integer_t,
161
162 pub resident_size: mach_vm_size_t,
164
165 pub resident_size_peak: mach_vm_size_t,
167
168 pub device: mach_vm_size_t,
169 pub device_peak: mach_vm_size_t,
170 pub internal: mach_vm_size_t,
171 pub internal_peak: mach_vm_size_t,
172 pub external: mach_vm_size_t,
173 pub external_peak: mach_vm_size_t,
174 pub reusable: mach_vm_size_t,
175 pub reusable_peak: mach_vm_size_t,
176 pub purgeable_volatile_pmap: mach_vm_size_t,
177 pub purgeable_volatile_resident: mach_vm_size_t,
178 pub purgeable_volatile_virtual: mach_vm_size_t,
179 pub compressed: mach_vm_size_t,
180 pub compressed_peak: mach_vm_size_t,
181 pub compressed_lifetime: mach_vm_size_t,
182
183 pub phys_footprint: mach_vm_size_t,
185}
186
187#[repr(C, packed(4))]
188#[derive(
189 Copy, Clone,
190 Debug, Default,
191 Hash,
192 PartialOrd, Ord,
193 PartialEq, Eq,
194)]
195pub struct task_vm_info_rev2_t {
196 pub virtual_size: mach_vm_size_t,
198
199 pub region_count: integer_t,
201
202 pub page_size: integer_t,
204
205 pub resident_size: mach_vm_size_t,
207
208 pub resident_size_peak: mach_vm_size_t,
210
211 pub device: mach_vm_size_t,
212 pub device_peak: mach_vm_size_t,
213 pub internal: mach_vm_size_t,
214 pub internal_peak: mach_vm_size_t,
215 pub external: mach_vm_size_t,
216 pub external_peak: mach_vm_size_t,
217 pub reusable: mach_vm_size_t,
218 pub reusable_peak: mach_vm_size_t,
219 pub purgeable_volatile_pmap: mach_vm_size_t,
220 pub purgeable_volatile_resident: mach_vm_size_t,
221 pub purgeable_volatile_virtual: mach_vm_size_t,
222 pub compressed: mach_vm_size_t,
223 pub compressed_peak: mach_vm_size_t,
224 pub compressed_lifetime: mach_vm_size_t,
225
226 pub phys_footprint: mach_vm_size_t,
228
229 pub min_address: mach_vm_address_t,
231 pub max_address: mach_vm_address_t,
232}
233
234#[repr(C, packed(4))]
235#[derive(
236 Copy, Clone,
237 Debug, Default,
238 Hash,
239 PartialOrd, Ord,
240 PartialEq, Eq,
241)]
242pub struct task_vm_info_rev3_t {
243 pub virtual_size: mach_vm_size_t,
245
246 pub region_count: integer_t,
248
249 pub page_size: integer_t,
251
252 pub resident_size: mach_vm_size_t,
254
255 pub resident_size_peak: mach_vm_size_t,
257
258 pub device: mach_vm_size_t,
259 pub device_peak: mach_vm_size_t,
260 pub internal: mach_vm_size_t,
261 pub internal_peak: mach_vm_size_t,
262 pub external: mach_vm_size_t,
263 pub external_peak: mach_vm_size_t,
264 pub reusable: mach_vm_size_t,
265 pub reusable_peak: mach_vm_size_t,
266 pub purgeable_volatile_pmap: mach_vm_size_t,
267 pub purgeable_volatile_resident: mach_vm_size_t,
268 pub purgeable_volatile_virtual: mach_vm_size_t,
269 pub compressed: mach_vm_size_t,
270 pub compressed_peak: mach_vm_size_t,
271 pub compressed_lifetime: mach_vm_size_t,
272
273 pub phys_footprint: mach_vm_size_t,
275
276 pub min_address: mach_vm_address_t,
278 pub max_address: mach_vm_address_t,
279
280 pub ledger_phys_footprint_peak: i64,
282 pub ledger_purgeable_nonvolatile: i64,
283 pub ledger_purgeable_novolatile_compressed: i64,
284 pub ledger_purgeable_volatile: i64,
285 pub ledger_purgeable_volatile_compressed: i64,
286 pub ledger_tag_network_nonvolatile: i64,
287 pub ledger_tag_network_nonvolatile_compressed: i64,
288 pub ledger_tag_network_volatile: i64,
289 pub ledger_tag_network_volatile_compressed: i64,
290 pub ledger_tag_media_footprint: i64,
291 pub ledger_tag_media_footprint_compressed: i64,
292 pub ledger_tag_media_nofootprint: i64,
293 pub ledger_tag_media_nofootprint_compressed: i64,
294 pub ledger_tag_graphics_footprint: i64,
295 pub ledger_tag_graphics_footprint_compressed: i64,
296 pub ledger_tag_graphics_nofootprint: i64,
297 pub ledger_tag_graphics_nofootprint_compressed: i64,
298 pub ledger_tag_neural_footprint: i64,
299 pub ledger_tag_neural_footprint_compressed: i64,
300 pub ledger_tag_neural_nofootprint: i64,
301 pub ledger_tag_neural_nofootprint_compressed: i64,
302}
303
304#[repr(C, packed(4))]
305#[derive(
306 Copy, Clone,
307 Debug, Default,
308 Hash,
309 PartialOrd, Ord,
310 PartialEq, Eq,
311)]
312pub struct task_vm_info_rev4_t {
313 pub virtual_size: mach_vm_size_t,
315
316 pub region_count: integer_t,
318
319 pub page_size: integer_t,
321
322 pub resident_size: mach_vm_size_t,
324
325 pub resident_size_peak: mach_vm_size_t,
327
328 pub device: mach_vm_size_t,
329 pub device_peak: mach_vm_size_t,
330 pub internal: mach_vm_size_t,
331 pub internal_peak: mach_vm_size_t,
332 pub external: mach_vm_size_t,
333 pub external_peak: mach_vm_size_t,
334 pub reusable: mach_vm_size_t,
335 pub reusable_peak: mach_vm_size_t,
336 pub purgeable_volatile_pmap: mach_vm_size_t,
337 pub purgeable_volatile_resident: mach_vm_size_t,
338 pub purgeable_volatile_virtual: mach_vm_size_t,
339 pub compressed: mach_vm_size_t,
340 pub compressed_peak: mach_vm_size_t,
341 pub compressed_lifetime: mach_vm_size_t,
342
343 pub phys_footprint: mach_vm_size_t,
345
346 pub min_address: mach_vm_address_t,
348 pub max_address: mach_vm_address_t,
349
350 pub ledger_phys_footprint_peak: i64,
352 pub ledger_purgeable_nonvolatile: i64,
353 pub ledger_purgeable_novolatile_compressed: i64,
354 pub ledger_purgeable_volatile: i64,
355 pub ledger_purgeable_volatile_compressed: i64,
356 pub ledger_tag_network_nonvolatile: i64,
357 pub ledger_tag_network_nonvolatile_compressed: i64,
358 pub ledger_tag_network_volatile: i64,
359 pub ledger_tag_network_volatile_compressed: i64,
360 pub ledger_tag_media_footprint: i64,
361 pub ledger_tag_media_footprint_compressed: i64,
362 pub ledger_tag_media_nofootprint: i64,
363 pub ledger_tag_media_nofootprint_compressed: i64,
364 pub ledger_tag_graphics_footprint: i64,
365 pub ledger_tag_graphics_footprint_compressed: i64,
366 pub ledger_tag_graphics_nofootprint: i64,
367 pub ledger_tag_graphics_nofootprint_compressed: i64,
368 pub ledger_tag_neural_footprint: i64,
369 pub ledger_tag_neural_footprint_compressed: i64,
370 pub ledger_tag_neural_nofootprint: i64,
371 pub ledger_tag_neural_nofootprint_compressed: i64,
372
373 pub limit_bytes_remaining: u64,
375}
376
377#[repr(C, packed(4))]
378#[derive(
379 Copy, Clone,
380 Debug, Default,
381 Hash,
382 PartialOrd, Ord,
383 PartialEq, Eq,
384)]
385pub struct task_vm_info_rev5_t {
386 pub virtual_size: mach_vm_size_t,
388
389 pub region_count: integer_t,
391
392 pub page_size: integer_t,
394
395 pub resident_size: mach_vm_size_t,
397
398 pub resident_size_peak: mach_vm_size_t,
400
401 pub device: mach_vm_size_t,
402 pub device_peak: mach_vm_size_t,
403 pub internal: mach_vm_size_t,
404 pub internal_peak: mach_vm_size_t,
405 pub external: mach_vm_size_t,
406 pub external_peak: mach_vm_size_t,
407 pub reusable: mach_vm_size_t,
408 pub reusable_peak: mach_vm_size_t,
409 pub purgeable_volatile_pmap: mach_vm_size_t,
410 pub purgeable_volatile_resident: mach_vm_size_t,
411 pub purgeable_volatile_virtual: mach_vm_size_t,
412 pub compressed: mach_vm_size_t,
413 pub compressed_peak: mach_vm_size_t,
414 pub compressed_lifetime: mach_vm_size_t,
415
416 pub phys_footprint: mach_vm_size_t,
418
419 pub min_address: mach_vm_address_t,
421 pub max_address: mach_vm_address_t,
422
423 pub ledger_phys_footprint_peak: i64,
425 pub ledger_purgeable_nonvolatile: i64,
426 pub ledger_purgeable_novolatile_compressed: i64,
427 pub ledger_purgeable_volatile: i64,
428 pub ledger_purgeable_volatile_compressed: i64,
429 pub ledger_tag_network_nonvolatile: i64,
430 pub ledger_tag_network_nonvolatile_compressed: i64,
431 pub ledger_tag_network_volatile: i64,
432 pub ledger_tag_network_volatile_compressed: i64,
433 pub ledger_tag_media_footprint: i64,
434 pub ledger_tag_media_footprint_compressed: i64,
435 pub ledger_tag_media_nofootprint: i64,
436 pub ledger_tag_media_nofootprint_compressed: i64,
437 pub ledger_tag_graphics_footprint: i64,
438 pub ledger_tag_graphics_footprint_compressed: i64,
439 pub ledger_tag_graphics_nofootprint: i64,
440 pub ledger_tag_graphics_nofootprint_compressed: i64,
441 pub ledger_tag_neural_footprint: i64,
442 pub ledger_tag_neural_footprint_compressed: i64,
443 pub ledger_tag_neural_nofootprint: i64,
444 pub ledger_tag_neural_nofootprint_compressed: i64,
445
446 pub limit_bytes_remaining: u64,
448
449 pub decompressions: integer_t,
451}
452
453#[repr(C, packed(4))]
454#[derive(
455 Copy, Clone,
456 Debug, Default,
457 Hash,
458 PartialOrd, Ord,
459 PartialEq, Eq,
460)]
461pub struct task_dyld_info_t {
462 pub all_image_info_addr: mach_vm_address_t,
463 pub all_image_info_size: mach_vm_size_t,
464 pub all_image_info_format: integer_t,
465}
466pub type task_dyld_info = task_dyld_info_t;
467pub type task_dyld_info_data_t = task_dyld_info_t;
468