Skip to main content

windows_erg/security/
rights.rs

1//! Resource-specific rights wrappers.
2
3use super::AccessMask;
4
5/// File access rights wrapper.
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum FileAccess {
8    /// Read data/list directory.
9    Read,
10    /// Write data/add file.
11    Write,
12    /// Execute/traverse.
13    Execute,
14    /// Read + write + execute + standard rights.
15    FullControl,
16    /// Custom raw mask.
17    Custom(AccessMask),
18}
19
20impl FileAccess {
21    /// Convert to generic access mask.
22    pub fn to_mask(self) -> AccessMask {
23        match self {
24            FileAccess::Read => AccessMask::from_bits(0x120089),
25            FileAccess::Write => AccessMask::from_bits(0x120116),
26            FileAccess::Execute => AccessMask::from_bits(0x1200A0),
27            FileAccess::FullControl => AccessMask::from_bits(0x1F01FF),
28            FileAccess::Custom(mask) => mask,
29        }
30    }
31}
32
33/// Registry key access rights wrapper.
34#[derive(Debug, Clone, Copy, PartialEq, Eq)]
35pub enum RegistryAccess {
36    /// KEY_READ.
37    Read,
38    /// KEY_WRITE.
39    Write,
40    /// KEY_READ | KEY_WRITE.
41    ReadWrite,
42    /// KEY_ALL_ACCESS.
43    FullControl,
44    /// Custom raw mask.
45    Custom(AccessMask),
46}
47
48impl RegistryAccess {
49    /// Convert to generic access mask.
50    pub fn to_mask(self) -> AccessMask {
51        match self {
52            RegistryAccess::Read => AccessMask::from_bits(0x20019),
53            RegistryAccess::Write => AccessMask::from_bits(0x20006),
54            RegistryAccess::ReadWrite => AccessMask::from_bits(0x2001F),
55            RegistryAccess::FullControl => AccessMask::from_bits(0xF003F),
56            RegistryAccess::Custom(mask) => mask,
57        }
58    }
59}