Alexandre Julliard : kernelbase: Implement ProcessIdToSessionId().

Alexandre Julliard julliard at winehq.org
Thu Jul 1 15:53:50 CDT 2021


Module: wine
Branch: master
Commit: 7995d6869a0b232dfb0956005ba8c863653a0845
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=7995d6869a0b232dfb0956005ba8c863653a0845

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Jul  1 15:30:48 2021 +0200

kernelbase: Implement ProcessIdToSessionId().

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernelbase/process.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c
index 7296e085382..101d3fa3213 100644
--- a/dlls/kernelbase/process.c
+++ b/dlls/kernelbase/process.c
@@ -1024,11 +1024,20 @@ HANDLE WINAPI DECLSPEC_HOTPATCH OpenProcess( DWORD access, BOOL inherit, DWORD i
 /***********************************************************************
  *           ProcessIdToSessionId   (kernelbase.@)
  */
-BOOL WINAPI DECLSPEC_HOTPATCH ProcessIdToSessionId( DWORD procid, DWORD *sessionid )
+BOOL WINAPI DECLSPEC_HOTPATCH ProcessIdToSessionId( DWORD pid, DWORD *id )
 {
-    if (procid != GetCurrentProcessId()) FIXME( "Unsupported for other process %x\n", procid );
-    *sessionid = NtCurrentTeb()->Peb->SessionId;
-    return TRUE;
+    HANDLE process;
+    NTSTATUS status;
+
+    if (pid == GetCurrentProcessId())
+    {
+        *id = NtCurrentTeb()->Peb->SessionId;
+        return TRUE;
+    }
+    if (!(process = OpenProcess( PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid ))) return FALSE;
+    status = NtQueryInformationProcess( process, ProcessSessionInformation, id, sizeof(*id), NULL );
+    CloseHandle( process );
+    return set_ntstatus( status );
 }
 
 




More information about the wine-cvs mailing list