From ec8d6842153222105ad2516758a46b97e796fb18 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Fri, 1 Aug 2008 16:54:14 +0000 Subject: [PATCH] - PspSetPrimaryToken: Fix some incorrect object dereferencing. - WlxStartApplication: Fix handle leaks. - Make userinit.exe exit when it's done everything. No need to wait for explorer to exit first. svn path=/trunk/; revision=35013 --- reactos/base/system/userinit/userinit.c | 1 - reactos/dll/win32/msgina/msgina.c | 2 ++ reactos/ntoskrnl/ps/security.c | 7 ++----- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/reactos/base/system/userinit/userinit.c b/reactos/base/system/userinit/userinit.c index d339ee3cbde..6b81fe38bfa 100644 --- a/reactos/base/system/userinit/userinit.c +++ b/reactos/base/system/userinit/userinit.c @@ -263,7 +263,6 @@ TryToStartShell( StartAutoApplications(CSIDL_STARTUP); StartAutoApplications(CSIDL_COMMON_STARTUP); - WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return TRUE; diff --git a/reactos/dll/win32/msgina/msgina.c b/reactos/dll/win32/msgina/msgina.c index c3de530092a..d017f6430b9 100644 --- a/reactos/dll/win32/msgina/msgina.c +++ b/reactos/dll/win32/msgina/msgina.c @@ -247,6 +247,8 @@ WlxStartApplication( CurrentDirectory, &StartupInfo, &ProcessInformation); + CloseHandle(ProcessInformation.hProcess); + CloseHandle(ProcessInformation.hThread); CloseHandle(hAppToken); if (!ret) WARN("CreateProcessAsUserW() failed with error %lu\n", GetLastError()); diff --git a/reactos/ntoskrnl/ps/security.c b/reactos/ntoskrnl/ps/security.c index 12b4cf1482a..525b130c076 100644 --- a/reactos/ntoskrnl/ps/security.c +++ b/reactos/ntoskrnl/ps/security.c @@ -255,7 +255,7 @@ PspSetPrimaryToken(IN PEPROCESS Process, PreviousMode)) { /* Failed, dereference */ - if (TokenHandle) ObDereferenceObject(Token); + if (TokenHandle) ObDereferenceObject(NewToken); return STATUS_PRIVILEGE_NOT_HELD; } } @@ -311,13 +311,10 @@ PspSetPrimaryToken(IN PEPROCESS Process, STANDARD_RIGHTS_ALL | PROCESS_SET_QUOTA); } - - /* Dereference the process */ - ObDereferenceObject(Process); } /* Dereference the token */ - if (Token) ObDereferenceObject(NewToken); + if (TokenHandle) ObDereferenceObject(NewToken); return Status; }