diff --git a/reactos/subsystems/win32/win32k/ntuser/class.c b/reactos/subsystems/win32/win32k/ntuser/class.c index 03e4f5db839..5e8b2e13d9d 100644 --- a/reactos/subsystems/win32/win32k/ntuser/class.c +++ b/reactos/subsystems/win32/win32k/ntuser/class.c @@ -508,11 +508,19 @@ IntGetClassForDesktop(IN OUT PCLS BaseClass, 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; Class->cWndReferenceCount = 0; @@ -1231,7 +1239,7 @@ UserRegisterClass(IN CONST WNDCLASSEXW* lpwcx, 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 @@ UserRegisterClass(IN CONST WNDCLASSEXW* lpwcx, 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 @@ UserUnregisterClass(IN PUNICODE_STRING ClassName, &Link); if (ClassAtom == (RTL_ATOM)0) { - DPRINT1("UserUnregisterClass: No Class found.\n"); + DPRINT("UserUnregisterClass: No Class found.\n"); return FALSE; } @@ -2120,12 +2128,12 @@ InvalidParameter: SetLastNtError(_SEH2_GetExceptionCode()); } _SEH2_END; - +/* if (!Ret) { DPRINT1("NtUserRegisterClassExWOW Null Return!\n"); } - + */ UserLeave(); return Ret;