Win32 structure cleanup (WIP):

- use rpdeskParent instead of Desktop in WINDOWCLASS
- use PDESKTOP instead of DESKTOPINFO in several places

svn path=/trunk/; revision=36820
This commit is contained in:
Timo Kreuzer
2008-10-19 01:06:30 +00:00
parent e287c51858
commit 2f79d7bdbc
6 changed files with 41 additions and 39 deletions
-1
View File
@@ -73,7 +73,6 @@ typedef struct _WINDOWCLASS
struct _WINDOWCLASS *Next;
struct _WINDOWCLASS *Clone;
struct _WINDOWCLASS *Base;
PDESKTOPINFO Desktop;
struct _DESKTOP *rpdeskParent;
RTL_ATOM Atom;
ULONG Windows;
@@ -2,6 +2,7 @@
#define _WIN32K_CLASS_H
#include <include/win32.h>
#include <include/desktop.h>
#define IS_ATOM(x) \
(((ULONG_PTR)(x) > 0x0) && ((ULONG_PTR)(x) < 0x10000))
@@ -46,7 +47,7 @@ DestroyProcessClasses(PW32PROCESS Process );
PWINDOWCLASS
IntReferenceClass(IN OUT PWINDOWCLASS BaseClass,
IN OUT PWINDOWCLASS *ClassLink,
IN PDESKTOPINFO Desktop);
IN PDESKTOP Desktop);
VOID
IntDereferenceClass(IN OUT PWINDOWCLASS Class,
@@ -95,7 +96,7 @@ IntGetAtomFromStringOrAtom(IN PUNICODE_STRING ClassName,
OUT RTL_ATOM *Atom);
BOOL
IntCheckProcessDesktopClasses(IN PDESKTOPINFO Desktop,
IntCheckProcessDesktopClasses(IN PDESKTOP Desktop,
IN BOOL FreeOnFailure);
#endif /* _WIN32K_CLASS_H */
@@ -136,31 +136,31 @@ VOID co_IntShellHookNotify(WPARAM Message, LPARAM lParam);
static __inline PVOID
DesktopHeapAlloc(IN PDESKTOPINFO Desktop,
DesktopHeapAlloc(IN PDESKTOP Desktop,
IN SIZE_T Bytes)
{
return RtlAllocateHeap(Desktop->hKernelHeap,
return RtlAllocateHeap(Desktop->DesktopInfo->hKernelHeap,
HEAP_NO_SERIALIZE,
Bytes);
}
static __inline BOOL
DesktopHeapFree(IN PDESKTOPINFO Desktop,
DesktopHeapFree(IN PDESKTOP Desktop,
IN PVOID lpMem)
{
return RtlFreeHeap(Desktop->hKernelHeap,
return RtlFreeHeap(Desktop->DesktopInfo->hKernelHeap,
HEAP_NO_SERIALIZE,
lpMem);
}
static __inline PVOID
DesktopHeapReAlloc(IN PDESKTOPINFO Desktop,
DesktopHeapReAlloc(IN PDESKTOP Desktop,
IN PVOID lpMem,
IN SIZE_T Bytes)
{
#if 0
/* NOTE: ntoskrnl doesn't export RtlReAllocateHeap... */
return RtlReAllocateHeap(Desktop->hKernelHeap,
return RtlReAllocateHeap(Desktop->DesktopInfo->hKernelHeap,
HEAP_NO_SERIALIZE,
lpMem,
Bytes);
@@ -168,14 +168,14 @@ DesktopHeapReAlloc(IN PDESKTOPINFO Desktop,
SIZE_T PrevSize;
PVOID pNew;
PrevSize = RtlSizeHeap(Desktop->hKernelHeap,
PrevSize = RtlSizeHeap(Desktop->DesktopInfo->hKernelHeap,
HEAP_NO_SERIALIZE,
lpMem);
if (PrevSize == Bytes)
return lpMem;
pNew = RtlAllocateHeap(Desktop->hKernelHeap,
pNew = RtlAllocateHeap(Desktop->DesktopInfo->hKernelHeap,
HEAP_NO_SERIALIZE,
Bytes);
if (pNew != NULL)
@@ -187,7 +187,7 @@ DesktopHeapReAlloc(IN PDESKTOPINFO Desktop,
lpMem,
Bytes);
RtlFreeHeap(Desktop->hKernelHeap,
RtlFreeHeap(Desktop->DesktopInfo->hKernelHeap,
HEAP_NO_SERIALIZE,
lpMem);
}
+21 -19
View File
@@ -85,9 +85,9 @@ IntDestroyClass(IN OUT PWINDOWCLASS Class)
}
/* free the structure */
if (Class->Desktop != NULL)
if (Class->rpdeskParent != NULL)
{
DesktopHeapFree(Class->Desktop,
DesktopHeapFree(Class->rpdeskParent,
Class);
}
else
@@ -395,7 +395,7 @@ IntSetClassWndProc(IN OUT PWINDOWCLASS Class,
static PWINDOWCLASS
IntGetClassForDesktop(IN OUT PWINDOWCLASS BaseClass,
IN OUT PWINDOWCLASS *ClassLink,
IN PDESKTOPINFO Desktop)
IN PDESKTOP Desktop)
{
SIZE_T ClassSize;
PWINDOWCLASS Class;
@@ -403,7 +403,7 @@ IntGetClassForDesktop(IN OUT PWINDOWCLASS BaseClass,
ASSERT(Desktop != NULL);
ASSERT(BaseClass->Base == BaseClass);
if (BaseClass->Desktop == Desktop)
if (BaseClass->rpdeskParent == Desktop)
{
/* it is most likely that a window is created on the same
desktop as the window class. */
@@ -411,7 +411,7 @@ IntGetClassForDesktop(IN OUT PWINDOWCLASS BaseClass,
return BaseClass;
}
if (BaseClass->Desktop == NULL)
if (BaseClass->rpdeskParent == NULL)
{
ASSERT(BaseClass->Windows == 0);
ASSERT(BaseClass->Clone == NULL);
@@ -430,7 +430,7 @@ IntGetClassForDesktop(IN OUT PWINDOWCLASS BaseClass,
Class = BaseClass->Clone;
while (Class != NULL)
{
if (Class->Desktop == Desktop)
if (Class->rpdeskParent == Desktop)
{
ASSERT(Class->Base == BaseClass);
ASSERT(Class->Clone == NULL);
@@ -457,10 +457,10 @@ IntGetClassForDesktop(IN OUT PWINDOWCLASS BaseClass,
ClassSize);
/* update some pointers and link the class */
Class->Desktop = Desktop;
Class->rpdeskParent = Desktop;
Class->Windows = 0;
if (BaseClass->Desktop == NULL)
if (BaseClass->rpdeskParent == NULL)
{
/* we don't really need the base class on the shared
heap anymore, delete it so the only class left is
@@ -502,7 +502,7 @@ IntGetClassForDesktop(IN OUT PWINDOWCLASS BaseClass,
PWINDOWCLASS
IntReferenceClass(IN OUT PWINDOWCLASS BaseClass,
IN OUT PWINDOWCLASS *ClassLink,
IN PDESKTOPINFO Desktop)
IN PDESKTOP Desktop)
{
PWINDOWCLASS Class;
@@ -528,9 +528,9 @@ IntMakeCloneBaseClass(IN OUT PWINDOWCLASS Class,
ASSERT(Class->Base != Class);
ASSERT(Class->Base->Clone != NULL);
ASSERT(Class->Desktop != NULL);
ASSERT(Class->rpdeskParent != NULL);
ASSERT(Class->Windows != 0);
ASSERT(Class->Base->Desktop != NULL);
ASSERT(Class->Base->rpdeskParent != NULL);
ASSERT(Class->Base->Windows == 0);
/* unlink the clone */
@@ -648,7 +648,7 @@ IntMoveClassToSharedHeap(IN OUT PWINDOWCLASS Class,
SIZE_T ClassSize;
ASSERT(Class->Base == Class);
ASSERT(Class->Desktop != NULL);
ASSERT(Class->rpdeskParent != NULL);
ASSERT(Class->Windows == 0);
ASSERT(Class->Clone == NULL);
@@ -662,7 +662,7 @@ IntMoveClassToSharedHeap(IN OUT PWINDOWCLASS Class,
Class,
ClassSize);
NewClass->Desktop = NULL;
NewClass->rpdeskParent = NULL;
NewClass->Base = NewClass;
/* replace the class in the list */
@@ -680,7 +680,7 @@ IntMoveClassToSharedHeap(IN OUT PWINDOWCLASS Class,
}
static VOID
IntCheckDesktopClasses(IN PDESKTOPINFO Desktop,
IntCheckDesktopClasses(IN PDESKTOP Desktop,
IN OUT PWINDOWCLASS *ClassList,
IN BOOL FreeOnFailure,
OUT BOOL *Ret)
@@ -704,7 +704,7 @@ IntCheckDesktopClasses(IN PDESKTOPINFO Desktop,
ASSERT(Class->Base == Class);
if (Class->Desktop == Desktop &&
if (Class->rpdeskParent == Desktop &&
Class->Windows == 0)
{
/* there shouldn't be any clones around anymore! */
@@ -749,7 +749,7 @@ IntCheckDesktopClasses(IN PDESKTOPINFO Desktop,
}
BOOL
IntCheckProcessDesktopClasses(IN PDESKTOPINFO Desktop,
IntCheckProcessDesktopClasses(IN PDESKTOP Desktop,
IN BOOL FreeOnFailure)
{
PW32PROCESSINFO pi;
@@ -792,7 +792,7 @@ IntCreateClass(IN CONST WNDCLASSEXW* lpwcx,
IN PUNICODE_STRING MenuName,
IN WNDPROC wpExtra,
IN DWORD dwFlags,
IN PDESKTOPINFO Desktop,
IN PDESKTOP Desktop,
IN PW32PROCESSINFO pi)
{
SIZE_T ClassSize;
@@ -838,7 +838,7 @@ IntCreateClass(IN CONST WNDCLASSEXW* lpwcx,
RtlZeroMemory(Class,
ClassSize);
Class->Desktop = Desktop;
Class->rpdeskParent = Desktop;
Class->Base = Class;
Class->Atom = Atom;
@@ -1131,6 +1131,7 @@ UserRegisterClass(IN CONST WNDCLASSEXW* lpwcx,
IN WNDPROC wpExtra,
IN DWORD dwFlags)
{
PTHREADINFO pti;
PW32THREADINFO ti;
PW32PROCESSINFO pi;
PWINDOWCLASS Class;
@@ -1139,6 +1140,7 @@ UserRegisterClass(IN CONST WNDCLASSEXW* lpwcx,
/* NOTE: Accessing the buffers in ClassName and MenuName may raise exceptions! */
pti = PsGetCurrentThreadWin32Thread();
ti = GetW32ThreadInfo();
if (ti == NULL || !ti->kpi->RegisteredSysClasses)
{
@@ -1180,7 +1182,7 @@ UserRegisterClass(IN CONST WNDCLASSEXW* lpwcx,
MenuName,
wpExtra,
dwFlags,
ti->Desktop,
pti->Desktop,
pi);
if (Class != NULL)
@@ -1914,7 +1914,7 @@ IntSetThreadDesktop(IN PDESKTOP DesktopObject,
}
if (OldDesktop != NULL &&
!IntCheckProcessDesktopClasses(OldDesktop->DesktopInfo,
!IntCheckProcessDesktopClasses(OldDesktop,
FreeOnFailure))
{
DPRINT1("Failed to move process classes to shared heap!\n");
@@ -343,12 +343,12 @@ UserFreeWindowInfo(PW32THREADINFO ti, PWINDOW_OBJECT WindowObject)
{
Wnd->WindowName.Length = 0;
Wnd->WindowName.MaximumLength = 0;
DesktopHeapFree(Wnd->pdesktop->DesktopInfo,
DesktopHeapFree(Wnd->pdesktop,
Wnd->WindowName.Buffer);
Wnd->WindowName.Buffer = NULL;
}
DesktopHeapFree(Wnd->pdesktop->DesktopInfo, Wnd);
DesktopHeapFree(Wnd->pdesktop, Wnd);
WindowObject->Wnd = NULL;
}
@@ -1601,7 +1601,7 @@ co_IntCreateWindowEx(DWORD dwExStyle,
Class = IntReferenceClass(Class,
ClassLink,
pti->Desktop->DesktopInfo);
pti->Desktop);
if (Class == NULL)
{
DPRINT1("Failed to reference window class!\n");
@@ -1619,7 +1619,7 @@ co_IntCreateWindowEx(DWORD dwExStyle,
otWindow, sizeof(WINDOW_OBJECT));
if (Window)
{
Window->Wnd = DesktopHeapAlloc(pti->Desktop->DesktopInfo,
Window->Wnd = DesktopHeapAlloc(pti->Desktop,
sizeof(WINDOW) + Class->WndExtra);
if (!Window->Wnd)
goto AllocErr;
@@ -1719,7 +1719,7 @@ AllocErr:
if (NULL != WindowName->Buffer && WindowName->Length > 0)
{
Wnd->WindowName.Buffer = DesktopHeapAlloc(Wnd->pdesktop->DesktopInfo,
Wnd->WindowName.Buffer = DesktopHeapAlloc(Wnd->pdesktop,
WindowName->Length + sizeof(UNICODE_NULL));
if (Wnd->WindowName.Buffer == NULL)
{
@@ -4592,11 +4592,11 @@ NtUserDefSetText(HWND hWnd, PUNICODE_STRING WindowText)
Wnd->WindowName.Buffer = NULL;
if (buf != NULL)
{
DesktopHeapFree(Wnd->pdesktop->DesktopInfo,
DesktopHeapFree(Wnd->pdesktop,
buf);
}
Wnd->WindowName.Buffer = DesktopHeapAlloc(Wnd->pdesktop->DesktopInfo,
Wnd->WindowName.Buffer = DesktopHeapAlloc(Wnd->pdesktop,
SafeText.Length + sizeof(UNICODE_NULL));
if (Wnd->WindowName.Buffer != NULL)
{