@@ -24,10 +24,10 @@ use windows::Win32::System::LibraryLoader::{
2424use windows:: Win32 :: System :: RemoteDesktop :: ProcessIdToSessionId ;
2525use windows:: Win32 :: System :: Threading :: {
2626 CREATE_UNICODE_ENVIRONMENT , CreateProcessAsUserW , CreateRemoteThread , EXTENDED_STARTUPINFO_PRESENT ,
27- GetCurrentProcess , GetExitCodeProcess , INFINITE , LPPROC_THREAD_ATTRIBUTE_LIST , LPTHREAD_START_ROUTINE , OpenProcess ,
28- OpenProcessToken , PEB , PROCESS_ACCESS_RIGHTS , PROCESS_BASIC_INFORMATION , PROCESS_CREATION_FLAGS ,
29- PROCESS_INFORMATION , PROCESS_NAME_WIN32 , PROCESS_TERMINATE , QueryFullProcessImageNameW , STARTUPINFOEXW ,
30- STARTUPINFOW , STARTUPINFOW_FLAGS , TerminateProcess , WaitForSingleObject ,
27+ GetCurrentProcess , GetCurrentProcessId , GetExitCodeProcess , INFINITE , LPPROC_THREAD_ATTRIBUTE_LIST ,
28+ LPTHREAD_START_ROUTINE , OpenProcess , OpenProcessToken , PEB , PROCESS_ACCESS_RIGHTS , PROCESS_BASIC_INFORMATION ,
29+ PROCESS_CREATION_FLAGS , PROCESS_INFORMATION , PROCESS_NAME_WIN32 , PROCESS_TERMINATE , QueryFullProcessImageNameW ,
30+ STARTUPINFOEXW , STARTUPINFOW , STARTUPINFOW_FLAGS , TerminateProcess , WaitForSingleObject ,
3131} ;
3232use windows:: Win32 :: UI :: Shell :: { SEE_MASK_NOCLOSEPROCESS , SHELLEXECUTEINFOW , ShellExecuteExW } ;
3333use windows:: Win32 :: UI :: WindowsAndMessaging :: {
@@ -902,13 +902,21 @@ fn terminate_process_by_name_impl(process_name: &str, session_id: Option<u32>) -
902902 Ok ( false )
903903}
904904
905- fn process_id_to_session ( pid : u32 ) -> Result < u32 > {
905+ /// Get the Windows session ID for a given process ID.
906+ pub fn process_id_to_session ( pid : u32 ) -> Result < u32 > {
906907 let mut session_id = 0 ;
907908 // SAFETY: `session_id` is always pointing to a valid memory location.
908909 unsafe { ProcessIdToSessionId ( pid, & mut session_id as * mut _ ) } ?;
909910 Ok ( session_id)
910911}
911912
913+ /// Get the current Windows session ID.
914+ pub fn get_current_session_id ( ) -> Result < u32 > {
915+ // SAFETY: FFI call with no outstanding preconditions.
916+ let process_id = unsafe { GetCurrentProcessId ( ) } ;
917+ process_id_to_session ( process_id)
918+ }
919+
912920struct EnumWindowsContext {
913921 expected_pid : u32 ,
914922 threads : Vec < u32 > ,
0 commit comments