Author: fireball Date: Fri Apr 25 21:36:32 2014 New Revision: 62970
URL: http://svn.reactos.org/svn/reactos?rev=62970&view=rev Log: [WIN32K] - Indeed Win32kProcessCallout may be called for a process with an already created Win32 Process Info. Handle it like in trunk. Found and fixed by Kamil Hornicek.
Modified: branches/arwinss/arwinss/server/main/init.c
Modified: branches/arwinss/arwinss/server/main/init.c URL: http://svn.reactos.org/svn/reactos/branches/arwinss/arwinss/server/main/init... ============================================================================== --- branches/arwinss/arwinss/server/main/init.c [iso-8859-1] (original) +++ branches/arwinss/arwinss/server/main/init.c [iso-8859-1] Fri Apr 25 21:36:32 2014 @@ -113,14 +113,20 @@ PPROCESSINFO Win32Process; NTSTATUS Status;
- DPRINT("Enter Win32kProcessCallback\n"); - /* Get the Win32 Process */ Win32Process = PsGetProcessWin32Process(Process); - DPRINT("Win32Process %p, Create %d\n", Win32Process, Create); - if (Create && !Win32Process) + DPRINT("Win32kProcessCallback(): Win32Process %p, Create %d\n", Win32Process, Create); + if (Create) { DPRINT("Creating W32 process PID:%d at IRQ level: %lu\n", Process->UniqueProcessId, KeGetCurrentIrql()); + + /* We might be called with an already allocated win32 process */ + if (Win32Process) + { + /* There is no more to do for us (this is a success code!) */ + Status = STATUS_ALREADY_WIN32; + return Status; + }
/* Allocate one if needed */ /* FIXME - lock the process */ @@ -189,7 +195,6 @@ UserLeave(); }
- DPRINT("Leave Win32kProcessCallback\n"); return STATUS_SUCCESS; }