emerald_kernel_user_link/
process.rs

1#[derive(Debug, Clone, Copy)]
2#[repr(C)]
3pub struct SpawnFileMapping {
4    pub src_fd: usize,
5    pub dst_fd: usize,
6}
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq)]
9#[repr(u8)]
10pub enum PriorityLevel {
11    VeryLow = 1,
12    Low = 2,
13    Normal = 3,
14    High = 4,
15    VeryHigh = 5,
16}
17
18impl PriorityLevel {
19    pub fn from_u64(value: u64) -> Option<Self> {
20        match value {
21            1 => Some(Self::VeryLow),
22            2 => Some(Self::Low),
23            3 => Some(Self::Normal),
24            4 => Some(Self::High),
25            5 => Some(Self::VeryHigh),
26            _ => None,
27        }
28    }
29
30    pub fn to_u64(self) -> u64 {
31        self as u64
32    }
33}
34
35#[derive(Debug, Clone, Default)]
36pub struct ProcessMetadata {
37    pub pid: u64,
38    pub image_base: usize,
39    pub image_size: usize,
40    pub program_headers_offset: usize,
41    pub eh_frame_address: usize,
42    pub eh_frame_size: usize,
43    pub text_address: usize,
44    pub text_size: usize,
45}
46
47impl ProcessMetadata {
48    pub fn empty() -> Self {
49        Self::default()
50    }
51}
52
53const PROCESS_METADATA_ADDR: *const ProcessMetadata =
54    0xFFFF_FF7F_FFFF_E000 as *const ProcessMetadata;
55
56pub fn process_metadata() -> &'static ProcessMetadata {
57    unsafe { &*PROCESS_METADATA_ADDR }
58}