fn is_elevated() ->
bool
{
let mut result =
false
;
let mut handle:
HANDLE
=
HANDLE
(0);
unsafe {
if
OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &mut handle).is_ok() {
let elevation = TOKEN_ELEVATION::
default
();
let size = std::mem::size_of::<TOKEN_ELEVATION>() as u32;
let mut ret_size = size;
let raw_ptr = &elevation as *
const
_ as *mut c_void;
if
GetTokenInformation(
handle,
TokenElevation.into(),
Some(raw_ptr),
size,
&mut ret_size,
)
.is_ok()
{
result = elevation.TokenIsElevated != 0;
}
}
let _ = CloseHandle(handle);
}
result
}