mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-31 12:23:31 +00:00
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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user