Struct windows_permissions::Sid[][src]

#[repr(C)]
pub struct Sid { /* fields omitted */ }
Expand description

A SID (Security Identifier) that can be used with Windows API calls.

Implementations

impl Sid[src]

pub fn new(id_auth: [u8; 6], sub_auths: &[u32]) -> Result<LocalBox<Sid>>[src]

Create a new SID from raw parts

use windows_permissions::Sid;

let sid_8 = Sid::new([1, 2, 3, 4, 5, 6], &[1, 2, 3, 4, 5, 6, 7, 8]).unwrap();

assert_eq!(sid_8.id_authority(), &[1, 2, 3, 4, 5, 6]);
assert_eq!(sid_8.sub_authority_count(), 8);
assert_eq!(sid_8.sub_authorities(), &[1, 2, 3, 4, 5, 6, 7, 8]);

No more than 8 sub-authorities can be made using this function. If more are needed, you can parse SDDL or use a wrapper function directly.

use windows_permissions::Sid;

assert!(Sid::new([1, 2, 3, 4, 5, 6], &[1, 2, 3, 4, 5, 6, 7, 8]).is_ok());
assert!(Sid::new([1, 2, 3, 4, 5, 6], &[1, 2, 3, 4, 5, 6, 7, 8, 9]).is_err());

pub fn well_known_sid(well_known_sid_type: u32) -> Result<LocalBox<Sid>>[src]

Create a new well-known SID

This is equivalent to calling wrappers::CreateWellKnownSid with None as the domain.

use windows_permissions::{Sid, LocalBox};
use winapi::um::winnt::WinWorldSid;

let win_world_sid = Sid::well_known_sid(WinWorldSid).unwrap();
let another_sid = "S-1-1-0".parse().unwrap();

assert_eq!(win_world_sid, another_sid);

pub fn sub_authority_count(&self) -> u8[src]

Get the number of sub-authorities in the SID

use windows_permissions::{Sid, LocalBox};

let sid1: LocalBox<Sid> = "S-1-5-1".parse().unwrap();
let sid2: LocalBox<Sid> = "S-1-5-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15".parse().unwrap();

assert_eq!(sid1.sub_authority_count(), 1);
assert_eq!(sid2.sub_authority_count(), 15);

pub fn id_authority(&self) -> &[u8; 6][src]

Get the ID authority of the SID

use windows_permissions::{Sid, LocalBox};

let sid1: LocalBox<Sid> = "S-1-5-12-62341".parse().unwrap();
let sid2: LocalBox<Sid> = "S-1-211111900160837-1".parse().unwrap();

assert_eq!(sid1.id_authority(), &[0, 0, 0, 0, 0, 5]);
assert_eq!(sid2.id_authority(), &[0xC0, 0x01, 0x51, 0xD1, 0x23, 0x45]);

pub fn sub_authority(&self, index: u8) -> Option<u32>[src]

Get a sub-authority of the SID if it is available

Returns None if the SID has too few sub-authorities.

use windows_permissions::{Sid, LocalBox};

let sid: LocalBox<Sid> = "S-1-5-12-62341".parse().unwrap();

assert_eq!(sid.sub_authority(0), Some(12));
assert_eq!(sid.sub_authority(1), Some(62341));
assert_eq!(sid.sub_authority(2), None);

pub fn sub_authorities(&self) -> Vec<u32>[src]

Generate a list of the sub-authorities in the SID

Changes in the returned Vec are not reflected in the SID

pub fn id_auth_to_number(id_auth: [u8; 6]) -> u64[src]

Get the numeric value of an ID authority

use windows_permissions::Sid;

assert_eq!(
    Sid::id_auth_to_number([0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC]),
    0x123456789ABCu64
);

Trait Implementations

impl Debug for Sid[src]

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result[src]

Formats the value using the given formatter. Read more

impl Display for Sid[src]

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result[src]

Formats the value using the given formatter. Read more

impl<'s> From<&'s Sid> for Trustee<'s>[src]

fn from(sid: &'s Sid) -> Self[src]

Performs the conversion.

impl Hash for Sid[src]

fn hash<H: Hasher>(&self, state: &mut H)[src]

Feeds this value into the given Hasher. Read more

fn hash_slice<H>(data: &[Self], state: &mut H) where
    H: Hasher
1.3.0[src]

Feeds a slice of this type into the given Hasher. Read more

impl PartialEq<Sid> for Sid[src]

fn eq(&self, other: &Sid) -> bool[src]

This method tests for self and other values to be equal, and is used by ==. Read more

#[must_use]
fn ne(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests for !=.

impl Eq for Sid[src]

Auto Trait Implementations

impl RefUnwindSafe for Sid

impl Send for Sid

impl Sync for Sid

impl Unpin for Sid

impl UnwindSafe for Sid

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

pub default fn to_string(&self) -> String[src]

Converts the given value to a String. Read more

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]

Performs the conversion.