Author: sir_richard Date: Wed Mar 10 04:35:18 2010 New Revision: 46048
URL: http://svn.reactos.org/svn/reactos?rev=46048&view=rev Log: [CSRSS]: Differentiate between first-try and second-try shutdown. In the first try, the console server should defer to the user/win32k server to attempt shutdown for a non-console app. However, if we end up with a second try because this did not happen, then the console server takes matters in its own hands and calls the CTRL-C handler (with some exceptions, such as system/service apps, or apps not belonging to the LUID).
Modified: trunk/reactos/subsystems/win32/csrss/api/process.c
Modified: trunk/reactos/subsystems/win32/csrss/api/process.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/csrss/api/... ============================================================================== --- trunk/reactos/subsystems/win32/csrss/api/process.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/csrss/api/process.c [iso-8859-1] Wed Mar 10 04:35:18 2010 @@ -696,7 +696,7 @@ PLUID CallerLuid = RealContext[0]; PCSRSS_PROCESS_DATA CsrProcess = NULL; NTSTATUS Status = STATUS_UNSUCCESSFUL; - BOOLEAN FirstTry = TRUE; + BOOLEAN FirstTry; ULONG Result = 0; ULONG Hash;
@@ -729,6 +729,7 @@ while (TRUE) { /* Find the next process to shutdown */ + FirstTry = TRUE; if (!(CsrProcess = FindProcessForShutdown(CallerLuid))) { /* Done, quit */ @@ -741,7 +742,7 @@ /* Release the lock, make the callback, and acquire it back */ DPRINT1("Found process: %lx\n", CsrProcess->ProcessId); CsrReleaseProcessLock(); - Result = (ULONG)EnumProc(CsrProcess, Context); + Result = (ULONG)EnumProc(CsrProcess, (PVOID)((ULONG_PTR)Context | FirstTry)); CsrAcquireProcessLock();
/* Check the result */ @@ -754,7 +755,7 @@ else if (Result == CsrShutdownNonCsrProcess) { /* A non-CSR process, the callback didn't touch it */ - continue; + //continue; } else if (Result == CsrShutdownCancelled) {