Author: jimtabor
Date: Sun Dec 13 14:14:45 2009
New Revision: 44561
URL:
http://svn.reactos.org/svn/reactos?rev=44561&view=rev
Log:
[Win32k]
- Class.c: Restore module address from cloned class if it is a default user class. See bug
4778
- Remove unneeded debug prints.
- Tested: wine user32 class test, AbiWord 2.6.8, FF 3.5 and OOo 2.4.3.
Modified:
trunk/reactos/subsystems/win32/win32k/ntuser/class.c
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/class.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/nt…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/ntuser/class.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/ntuser/class.c [iso-8859-1] Sun Dec 13 14:14:45
2009
@@ -508,10 +508,18 @@
if (Class != NULL)
{
/* simply clone the class */
- RtlCopyMemory(Class,
- BaseClass,
- ClassSize);
+ RtlCopyMemory( Class, BaseClass, ClassSize);
+
DPRINT("Clone Class 0x%x hM 0x%x\n %S\n",Class, Class->hModule,
Class->lpszClientUnicodeMenuName);
+
+ /* restore module address if default user class Ref: Bug 4778 */
+ if ( Class->hModule != hModClient &&
+ Class->fnid <= FNID_GHOST &&
+ Class->fnid >= FNID_BUTTON )
+ {
+ Class->hModule = hModClient;
+ DPRINT("Clone Class 0x%x Reset hM 0x%x\n",Class,
Class->hModule);
+ }
/* update some pointers and link the class */
Class->rpdeskParent = Desktop;
@@ -1231,7 +1239,7 @@
if (Class != NULL && !Class->Global)
{
// local class already exists
- DPRINT1("Local Class 0x%p does already exist!\n", ClassAtom);
+ DPRINT("Local Class 0x%p does already exist!\n", ClassAtom);
SetLastWin32Error(ERROR_CLASS_ALREADY_EXISTS);
return (RTL_ATOM)0;
}
@@ -1245,7 +1253,7 @@
if (Class != NULL && Class->Global)
{
- DPRINT1("Global Class 0x%p does already exist!\n", ClassAtom);
+ DPRINT("Global Class 0x%p does already exist!\n", ClassAtom);
SetLastWin32Error(ERROR_CLASS_ALREADY_EXISTS);
return (RTL_ATOM)0;
}
@@ -1306,7 +1314,7 @@
&Link);
if (ClassAtom == (RTL_ATOM)0)
{
- DPRINT1("UserUnregisterClass: No Class found.\n");
+ DPRINT("UserUnregisterClass: No Class found.\n");
return FALSE;
}
@@ -2120,12 +2128,12 @@
SetLastNtError(_SEH2_GetExceptionCode());
}
_SEH2_END;
-
+/*
if (!Ret)
{
DPRINT1("NtUserRegisterClassExWOW Null Return!\n");
}
-
+ */
UserLeave();
return Ret;