in file_utils/src/privilege_context.rs [22:61]
fn is_elevated_impl() -> bool {
// In a Unix-like environment, when a program is run with sudo,
// the effective user ID (euid) of the process is set to 0.
#[cfg(unix)]
{
unsafe { libc::geteuid() == 0 }
}
#[cfg(windows)]
{
let mut token: HANDLE = std::ptr::null_mut();
if unsafe { OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &mut token) } == 0 {
return false;
}
let mut elevation: TOKEN_ELEVATION = unsafe { std::mem::zeroed() };
let mut return_length = 0;
let success = unsafe {
GetTokenInformation(
token,
TokenElevation,
&mut elevation as *mut _ as *mut _,
std::mem::size_of::<TOKEN_ELEVATION>() as u32,
&mut return_length,
)
};
if success == 0 {
false
} else {
elevation.TokenIsElevated != 0
}
}
#[cfg(not(any(unix, windows)))]
{
// For other platforms, we assume not elevated
false
}
}