- Chek if there is something to do in GDIOBJ_SetOwnership before doing it

svn path=/trunk/; revision=47788
This commit is contained in:
Jérôme Gardou 2010-06-16 18:47:04 +00:00
parent 1a601ba9e5
commit 57d80a50d5

View file

@ -1412,6 +1412,19 @@ LockHandle:
PPROCESSINFO W32Process; PPROCESSINFO W32Process;
NTSTATUS Status; NTSTATUS Status;
if (NewOwner != NULL)
{
ProcessId = PsGetProcessId(NewOwner);
}
else
ProcessId = 0;
if((ULONG_PTR)ProcessId == ((ULONG_PTR)PrevProcId & ~0x1))
{
DPRINT("Setting same process than previous one, nothing to do\n");
goto done;
}
/* dereference the process' object counter */ /* dereference the process' object counter */
/* FIXME */ /* FIXME */
if ((ULONG_PTR)PrevProcId & ~0x1) if ((ULONG_PTR)PrevProcId & ~0x1)
@ -1430,8 +1443,6 @@ LockHandle:
if (NewOwner != NULL) if (NewOwner != NULL)
{ {
ProcessId = PsGetProcessId(NewOwner);
/* Increase the new process' object counter */ /* Increase the new process' object counter */
W32Process = (PPROCESSINFO)NewOwner->Win32Process; W32Process = (PPROCESSINFO)NewOwner->Win32Process;
if (W32Process != NULL) if (W32Process != NULL)
@ -1439,9 +1450,8 @@ LockHandle:
InterlockedIncrement(&W32Process->GDIHandleCount); InterlockedIncrement(&W32Process->GDIHandleCount);
} }
} }
else
ProcessId = 0;
done:
/* remove the process id lock and change it to the new process id */ /* remove the process id lock and change it to the new process id */
(void)InterlockedExchangePointer((PVOID*)&Entry->ProcessId, ProcessId); (void)InterlockedExchangePointer((PVOID*)&Entry->ProcessId, ProcessId);