|
| 1 | +use std::os::windows::io::{FromRawHandle, OwnedHandle}; |
| 2 | + |
1 | 3 | use win32_ecoqos::windows_result; |
2 | 4 | use windows::Win32::{ |
3 | | - Foundation::{CloseHandle, HANDLE, LUID}, |
| 5 | + Foundation::{HANDLE, LUID}, |
4 | 6 | Security::{ |
5 | 7 | AdjustTokenPrivileges, GetTokenInformation, LUID_AND_ATTRIBUTES, LookupPrivilegeValueW, |
6 | 8 | SE_DEBUG_NAME, SE_PRIVILEGE_ENABLED, TOKEN_ADJUST_PRIVILEGES, TOKEN_ELEVATION, |
@@ -57,23 +59,15 @@ fn enable_se_debug(tokenhandle: HANDLE) -> windows_result::Result<()> { |
57 | 59 | } |
58 | 60 |
|
59 | 61 | pub fn try_enable_se_debug_privilege() -> windows_result::Result<bool> { |
60 | | - let is_admin; |
61 | | - |
62 | 62 | unsafe { |
63 | 63 | let processhandle = GetCurrentProcess(); |
64 | 64 | let mut tokenhandle = HANDLE(std::ptr::null_mut()); |
65 | 65 | let desiredaccess = TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY; |
66 | 66 |
|
67 | 67 | OpenProcessToken(processhandle, desiredaccess, &mut tokenhandle as _)?; |
68 | 68 |
|
69 | | - is_admin = is_elevated(tokenhandle).inspect_err(|_| { |
70 | | - _ = CloseHandle(tokenhandle); |
71 | | - })?; |
72 | | - |
73 | | - let enable = enable_se_debug(tokenhandle); |
74 | | - _ = CloseHandle(tokenhandle); |
75 | | - enable?; |
| 69 | + let _defer = OwnedHandle::from_raw_handle(tokenhandle.0); |
| 70 | + enable_se_debug(tokenhandle)?; |
| 71 | + is_elevated(tokenhandle) |
76 | 72 | } |
77 | | - |
78 | | - Ok(is_admin) |
79 | 73 | } |
0 commit comments