File tree Expand file tree Collapse file tree 2 files changed +16
-5
lines changed Expand file tree Collapse file tree 2 files changed +16
-5
lines changed Original file line number Diff line number Diff line change 1
1
use crate :: common:: { date, enums:: * , sqlite} ;
2
- use crate :: config:: Browser ;
3
2
use eyre:: { bail, Result } ;
4
3
use std:: path:: PathBuf ;
5
4
5
+ #[ allow( unused) ]
6
+ use crate :: config:: Browser ;
7
+
6
8
#[ cfg( target_os = "windows" ) ]
7
9
use crate :: windows;
8
10
Original file line number Diff line number Diff line change @@ -82,13 +82,22 @@ fn get_process_name(pid: u32) -> Result<String> {
82
82
}
83
83
}
84
84
85
- fn get_lsass_pid ( ) -> Result < u32 > {
85
+ fn get_system_process_pid ( ) -> Result < u32 > {
86
+ let mut fallback_pid = None ;
87
+
86
88
for pid in get_process_pids ( ) ? {
87
- if get_process_name ( pid) . unwrap_or_default ( ) == "lsass.exe" {
89
+ let process_name = get_process_name ( pid) . unwrap_or_default ( ) ;
90
+
91
+ if process_name == "lsass.exe" {
88
92
return Ok ( pid) ;
93
+ } else if process_name == "winlogon.exe" {
94
+ fallback_pid = Some ( pid) ;
89
95
}
90
96
}
91
- bail ! ( "lsass.exe not found!" )
97
+ if let Some ( pid) = fallback_pid {
98
+ return Ok ( pid) ;
99
+ }
100
+ bail ! ( "Neither lsass.exe nor winlogon.exe found!" )
92
101
}
93
102
94
103
fn get_process_handle ( pid : u32 ) -> Result < HANDLE > {
@@ -135,7 +144,7 @@ fn get_system_token(lsass_handle: HANDLE) -> Result<HANDLE> {
135
144
136
145
pub fn start_impersonate ( ) -> Result < HANDLE > {
137
146
enable_privilege ( ) ?;
138
- let pid = get_lsass_pid ( ) ?;
147
+ let pid = get_system_process_pid ( ) ?;
139
148
let lsass_handle = get_process_handle ( pid) ?;
140
149
let duplicated_token = get_system_token ( lsass_handle) ?;
141
150
close_handle ( lsass_handle) ?;
You can’t perform that action at this time.
0 commit comments