From b26683b0b3c4ab6020012b231c040882ee074b51 Mon Sep 17 00:00:00 2001 From: Thomas Bluemel Date: Sat, 2 Oct 2004 21:14:08 +0000 Subject: [PATCH] fixed ProcessIdToSessionId() svn path=/trunk/; revision=11161 --- reactos/lib/kernel32/process/proc.c | 4 +- reactos/lib/kernel32/process/session.c | 84 ++++++++++++++------------ 2 files changed, 48 insertions(+), 40 deletions(-) diff --git a/reactos/lib/kernel32/process/proc.c b/reactos/lib/kernel32/process/proc.c index 900b3268e2a..218c74f8df6 100644 --- a/reactos/lib/kernel32/process/proc.c +++ b/reactos/lib/kernel32/process/proc.c @@ -1,4 +1,4 @@ -/* $Id: proc.c,v 1.68 2004/09/23 19:01:38 weiden Exp $ +/* $Id: proc.c,v 1.69 2004/10/02 21:14:08 weiden Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS system libraries @@ -356,7 +356,7 @@ OpenProcess(DWORD dwDesiredAccess, NTSTATUS errCode; HANDLE ProcessHandle; OBJECT_ATTRIBUTES ObjectAttributes; - CLIENT_ID ClientId ; + CLIENT_ID ClientId; ClientId.UniqueProcess = (HANDLE)dwProcessId; ClientId.UniqueThread = INVALID_HANDLE_VALUE; diff --git a/reactos/lib/kernel32/process/session.c b/reactos/lib/kernel32/process/session.c index 385195a59cc..feebe7c6dab 100644 --- a/reactos/lib/kernel32/process/session.c +++ b/reactos/lib/kernel32/process/session.c @@ -1,4 +1,4 @@ -/* $Id: session.c,v 1.6 2004/09/23 21:01:23 ea Exp $ +/* $Id: session.c,v 1.7 2004/10/02 21:14:08 weiden Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS system libraries @@ -48,44 +48,52 @@ DosPathToSessionPathA (DWORD SessionId, LPSTR InPath, LPSTR * OutPath) BOOL STDCALL ProcessIdToSessionId (IN DWORD dwProcessId, OUT DWORD* pSessionId) { - NTSTATUS Status = STATUS_SUCCESS; - HANDLE ProcessHandle = INVALID_HANDLE_VALUE; - OBJECT_ATTRIBUTES Oa = { sizeof (OBJECT_ATTRIBUTES), 0, }; - DWORD SessionId = 0; + PROCESS_SESSION_INFORMATION SessionInformation; + OBJECT_ATTRIBUTES ObjectAttributes; + CLIENT_ID ClientId; + HANDLE ProcessHandle; + NTSTATUS Status; + + if(IsBadWritePtr(pSessionId, sizeof(DWORD))) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + ClientId.UniqueProcess = (HANDLE)dwProcessId; + ClientId.UniqueThread = INVALID_HANDLE_VALUE; - if (IsBadWritePtr(pSessionId, sizeof (DWORD))) - { - SetLastError (ERROR_INVALID_DATA); //FIXME - goto ProcessIdToSessionId_FAIL_EXIT; - } - Status = NtOpenProcess ( - & ProcessHandle, - PROCESS_QUERY_INFORMATION, - & Oa, - NULL); - if (!NT_SUCCESS(Status)) - { - goto ProcessIdToSessionId_FAIL; - } - Status = NtQueryInformationProcess ( - ProcessHandle, - ProcessSessionInformation, - & SessionId, - sizeof SessionId, - NULL); - if (!NT_SUCCESS(Status)) - { - NtClose (ProcessHandle); - goto ProcessIdToSessionId_FAIL; - } - NtClose (ProcessHandle); - *pSessionId = SessionId; - return TRUE; - -ProcessIdToSessionId_FAIL: - SetLastErrorByStatus(Status); -ProcessIdToSessionId_FAIL_EXIT: - return FALSE; + InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL); + + Status = NtOpenProcess(&ProcessHandle, + PROCESS_QUERY_INFORMATION, + &ObjectAttributes, + &ClientId); + if(NT_SUCCESS(Status)) + { + Status = NtQueryInformationProcess(ProcessHandle, + ProcessSessionInformation, + &SessionInformation, + sizeof(SessionInformation), + NULL); + NtClose(ProcessHandle); + + if(NT_SUCCESS(Status)) + { + *pSessionId = SessionInformation.SessionId; + return TRUE; + } + else + { + SetLastErrorByStatus(Status); + } + } + else + { + SetLastErrorByStatus(Status); + } + + return FALSE; } /*