- Update W32PROCESS and related code.

svn path=/trunk/; revision=40293
This commit is contained in:
James Tabor 2009-03-30 03:56:53 +00:00
parent 4ff599ba79
commit ea204363b7
6 changed files with 38 additions and 36 deletions

View file

@ -64,19 +64,21 @@ typedef struct _W32HEAP_USER_MAPPING
typedef struct _W32PROCESS typedef struct _W32PROCESS
{ {
PEPROCESS peProcess; PEPROCESS peProcess;
DWORD RefCount; DWORD RefCount;
ULONG Flags; /* W32PF_flags; */ ULONG W32PF_flags;
PKEVENT InputIdleEvent; PKEVENT InputIdleEvent;
DWORD StartCursorHideTime; DWORD StartCursorHideTime;
DWORD NextStart; DWORD NextStart;
PVOID pDCAttrList; PVOID pDCAttrList;
PVOID pBrushAttrList; PVOID pBrushAttrList;
DWORD W32Pid; DWORD W32Pid;
LONG GDIObjects; LONG GDIHandleCount;
LONG UserObjects; LONG UserHandleCount;
DWORD cSimpleLock; /* Locking Process during access to structure. */ DWORD cSimpleLock; /* Locking Process during access to structure. */
RTL_AVL_TABLE rtlAvlTable; /* Process AVL Table. */ RTL_AVL_TABLE rtlAvlTable; /* Process AVL Table. */
LIST_ENTRY leDCAttrList;
LIST_ENTRY leObjAttrList;
/* ReactOS */ /* ReactOS */
LIST_ENTRY ClassList; LIST_ENTRY ClassList;
LIST_ENTRY MenuListHead; LIST_ENTRY MenuListHead;

View file

@ -129,7 +129,7 @@ Win32kProcessCallback(struct _EPROCESS *Process,
} }
/* setup process flags */ /* setup process flags */
Win32Process->Flags = 0; Win32Process->W32PF_flags = 0;
} }
else else
{ {

View file

@ -47,7 +47,7 @@ static LONG NrGuiAppsRunning = 0;
static BOOL FASTCALL static BOOL FASTCALL
co_AddGuiApp(PW32PROCESS W32Data) co_AddGuiApp(PW32PROCESS W32Data)
{ {
W32Data->Flags |= W32PF_CREATEDWINORDC; W32Data->W32PF_flags |= W32PF_CREATEDWINORDC;
if (InterlockedIncrement(&NrGuiAppsRunning) == 1) if (InterlockedIncrement(&NrGuiAppsRunning) == 1)
{ {
BOOL Initialized; BOOL Initialized;
@ -56,7 +56,7 @@ co_AddGuiApp(PW32PROCESS W32Data)
if (!Initialized) if (!Initialized)
{ {
W32Data->Flags &= ~W32PF_CREATEDWINORDC; W32Data->W32PF_flags &= ~W32PF_CREATEDWINORDC;
InterlockedDecrement(&NrGuiAppsRunning); InterlockedDecrement(&NrGuiAppsRunning);
return FALSE; return FALSE;
} }
@ -67,7 +67,7 @@ co_AddGuiApp(PW32PROCESS W32Data)
static void FASTCALL static void FASTCALL
RemoveGuiApp(PW32PROCESS W32Data) RemoveGuiApp(PW32PROCESS W32Data)
{ {
W32Data->Flags &= ~W32PF_CREATEDWINORDC; W32Data->W32PF_flags &= ~W32PF_CREATEDWINORDC;
if (InterlockedDecrement(&NrGuiAppsRunning) == 0) if (InterlockedDecrement(&NrGuiAppsRunning) == 0)
{ {
IntEndDesktopGraphics(); IntEndDesktopGraphics();
@ -82,14 +82,14 @@ co_IntGraphicsCheck(BOOL Create)
W32Data = PsGetCurrentProcessWin32Process(); W32Data = PsGetCurrentProcessWin32Process();
if (Create) if (Create)
{ {
if (! (W32Data->Flags & W32PF_CREATEDWINORDC) && ! (W32Data->Flags & W32PF_MANUALGUICHECK)) if (! (W32Data->W32PF_flags & W32PF_CREATEDWINORDC) && ! (W32Data->W32PF_flags & W32PF_MANUALGUICHECK))
{ {
return co_AddGuiApp(W32Data); return co_AddGuiApp(W32Data);
} }
} }
else else
{ {
if ((W32Data->Flags & W32PF_CREATEDWINORDC) && ! (W32Data->Flags & W32PF_MANUALGUICHECK)) if ((W32Data->W32PF_flags & W32PF_CREATEDWINORDC) && ! (W32Data->W32PF_flags & W32PF_MANUALGUICHECK))
{ {
RemoveGuiApp(W32Data); RemoveGuiApp(W32Data);
} }
@ -109,18 +109,18 @@ IntUserManualGuiCheck(LONG Check)
W32Data = PsGetCurrentProcessWin32Process(); W32Data = PsGetCurrentProcessWin32Process();
if (0 == Check) if (0 == Check)
{ {
W32Data->Flags |= W32PF_MANUALGUICHECK; W32Data->W32PF_flags |= W32PF_MANUALGUICHECK;
} }
else if (0 < Check) else if (0 < Check)
{ {
if (! (W32Data->Flags & W32PF_CREATEDWINORDC)) if (! (W32Data->W32PF_flags & W32PF_CREATEDWINORDC))
{ {
co_AddGuiApp(W32Data); co_AddGuiApp(W32Data);
} }
} }
else else
{ {
if (W32Data->Flags & W32PF_CREATEDWINORDC) if (W32Data->W32PF_flags & W32PF_CREATEDWINORDC)
{ {
RemoveGuiApp(W32Data); RemoveGuiApp(W32Data);
} }

View file

@ -283,12 +283,12 @@ NtUserGetGuiResources(
{ {
case GR_GDIOBJECTS: case GR_GDIOBJECTS:
{ {
Ret = (DWORD)W32Process->GDIObjects; Ret = (DWORD)W32Process->GDIHandleCount;
break; break;
} }
case GR_USEROBJECTS: case GR_USEROBJECTS:
{ {
Ret = (DWORD)W32Process->UserObjects; Ret = (DWORD)W32Process->UserHandleCount;
break; break;
} }
default: default:

View file

@ -342,11 +342,11 @@ NtUserCallOneParam(
if(Enable) if(Enable)
{ {
Process->Flags &= ~W32PF_NOWINDOWGHOSTING; Process->W32PF_flags &= ~W32PF_NOWINDOWGHOSTING;
} }
else else
{ {
Process->Flags |= W32PF_NOWINDOWGHOSTING; Process->W32PF_flags |= W32PF_NOWINDOWGHOSTING;
} }
RETURN( TRUE); RETURN( TRUE);

View file

@ -355,7 +355,7 @@ GDIOBJ_AllocObjWithHandle(ULONG ObjectType)
W32Process = PsGetCurrentProcessWin32Process(); W32Process = PsGetCurrentProcessWin32Process();
/* HACK HACK HACK: simplest-possible quota implementation - don't allow a process /* HACK HACK HACK: simplest-possible quota implementation - don't allow a process
to take too many GDI objects, itself. */ to take too many GDI objects, itself. */
if (W32Process && W32Process->GDIObjects >= 0x2710) if (W32Process && W32Process->GDIHandleCount >= 0x2710)
{ {
DPRINT1("Too many objects for process!!!\n"); DPRINT1("Too many objects for process!!!\n");
GDIDBG_DUMPHANDLETABLE(); GDIDBG_DUMPHANDLETABLE();
@ -426,7 +426,7 @@ LockHandle:
if (W32Process != NULL) if (W32Process != NULL)
{ {
InterlockedIncrement(&W32Process->GDIObjects); InterlockedIncrement(&W32Process->GDIHandleCount);
} }
DPRINT("GDIOBJ_AllocObj: 0x%x ob: 0x%x\n", Handle, newObject); DPRINT("GDIOBJ_AllocObj: 0x%x ob: 0x%x\n", Handle, newObject);
@ -559,7 +559,7 @@ LockHandle:
if (W32Process != NULL) if (W32Process != NULL)
{ {
InterlockedDecrement(&W32Process->GDIObjects); InterlockedDecrement(&W32Process->GDIHandleCount);
} }
/* call the cleanup routine. */ /* call the cleanup routine. */
@ -688,7 +688,7 @@ IntDeleteHandlesForProcess(struct _EPROCESS *Process, ULONG ObjectType)
W32Process = (PW32PROCESS)Process->Win32Process; W32Process = (PW32PROCESS)Process->Win32Process;
ASSERT(W32Process); ASSERT(W32Process);
if (W32Process->GDIObjects > 0) if (W32Process->GDIHandleCount > 0)
{ {
ProcId = Process->UniqueProcessId; ProcId = Process->UniqueProcessId;
@ -719,7 +719,7 @@ IntDeleteHandlesForProcess(struct _EPROCESS *Process, ULONG ObjectType)
DPRINT1("Failed to delete object %p!\n", ObjectHandle); DPRINT1("Failed to delete object %p!\n", ObjectHandle);
} }
if (W32Process->GDIObjects == 0) if (W32Process->GDIHandleCount == 0)
{ {
/* there are no more gdi handles for this process, bail */ /* there are no more gdi handles for this process, bail */
break; break;
@ -768,9 +768,9 @@ GDI_CleanupForProcess(struct _EPROCESS *Process)
#endif #endif
DPRINT("Completed cleanup for process %d\n", Process->UniqueProcessId); DPRINT("Completed cleanup for process %d\n", Process->UniqueProcessId);
if (W32Process->GDIObjects > 0) if (W32Process->GDIHandleCount > 0)
{ {
DPRINT1("Leaking %d handles!\n", W32Process->GDIObjects); DPRINT1("Leaking %d handles!\n", W32Process->GDIHandleCount);
} }
return TRUE; return TRUE;
@ -1140,7 +1140,7 @@ LockHandle:
W32Process = (PW32PROCESS)OldProcess->Win32Process; W32Process = (PW32PROCESS)OldProcess->Win32Process;
if (W32Process != NULL) if (W32Process != NULL)
{ {
InterlockedDecrement(&W32Process->GDIObjects); InterlockedDecrement(&W32Process->GDIHandleCount);
} }
ObDereferenceObject(OldProcess); ObDereferenceObject(OldProcess);
} }
@ -1243,7 +1243,7 @@ LockHandle:
W32Process = (PW32PROCESS)OldProcess->Win32Process; W32Process = (PW32PROCESS)OldProcess->Win32Process;
if (W32Process != NULL) if (W32Process != NULL)
{ {
InterlockedDecrement(&W32Process->GDIObjects); InterlockedDecrement(&W32Process->GDIHandleCount);
} }
ObDereferenceObject(OldProcess); ObDereferenceObject(OldProcess);
} }
@ -1257,7 +1257,7 @@ LockHandle:
W32Process = (PW32PROCESS)NewOwner->Win32Process; W32Process = (PW32PROCESS)NewOwner->Win32Process;
if (W32Process != NULL) if (W32Process != NULL)
{ {
InterlockedIncrement(&W32Process->GDIObjects); InterlockedIncrement(&W32Process->GDIHandleCount);
} }
} }
else else