mirror of
https://github.com/reactos/reactos.git
synced 2025-06-06 01:40:36 +00:00
- Update W32PROCESS and related code.
svn path=/trunk/; revision=40293
This commit is contained in:
parent
4ff599ba79
commit
ea204363b7
6 changed files with 38 additions and 36 deletions
|
@ -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;
|
||||||
|
|
|
@ -129,7 +129,7 @@ Win32kProcessCallback(struct _EPROCESS *Process,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* setup process flags */
|
/* setup process flags */
|
||||||
Win32Process->Flags = 0;
|
Win32Process->W32PF_flags = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue