[ros-diffs] [jimtabor] 44561: [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.

jimtabor at svn.reactos.org jimtabor at svn.reactos.org
Sun Dec 13 14:14:45 CET 2009


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/ntuser/class.c?rev=44561&r1=44560&r2=44561&view=diff
==============================================================================
--- 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;




More information about the Ros-diffs mailing list