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/ntu... ============================================================================== --- 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;