- Don't duplicate the process handle.  
- Do close the process and thread handle if the caller doesn't request it.
Modified: trunk/reactos/subsys/smss/smapiexec.c

Modified: trunk/reactos/subsys/smss/smapiexec.c
--- trunk/reactos/subsys/smss/smapiexec.c	2005-05-30 19:45:04 UTC (rev 15686)
+++ trunk/reactos/subsys/smss/smapiexec.c	2005-05-30 20:11:44 UTC (rev 15687)
@@ -113,24 +113,6 @@
 				__FUNCTION__, Status);
 		}
 	}
-	else
-	{
-		HANDLE DupProcessHandle = (HANDLE) 0;
-		
-		Status = NtDuplicateObject (NtCurrentProcess(),
-					    pProcessInfo->ProcessHandle,
-					    NtCurrentProcess(),
-					    & DupProcessHandle,
-					    PROCESS_ALL_ACCESS,
-					    0, 0);
-		if(!NT_SUCCESS(Status))
-		{
-			DPRINT1("SM: %s: NtDuplicateObject failed (Status=0x%08lx)\n",
-				__FUNCTION__, Status);
-		}
-		pProcessInfo->ProcessHandle = DupProcessHandle;
-		
-	}
 
 	/* Wait for process termination */
 	if (WaitForIt)
@@ -145,6 +127,11 @@
 		}
 		
 	}
+        if (NULL == UserProcessInfo)
+        {
+           NtClose(pProcessInfo->ProcessHandle);
+           NtClose(pProcessInfo->ThreadHandle);
+        }
 	return Status;
 }