https://git.reactos.org/?p=reactos.git;a=commitdiff;h=27c3a4d26a9f00cea3def…
commit 27c3a4d26a9f00cea3def9d9fc547ff6ea863424
Author: Timo Kreuzer <timo.kreuzer(a)reactos.org>
AuthorDate: Fri Aug 17 14:50:22 2018 +0200
Commit: Timo Kreuzer <timo.kreuzer(a)reactos.org>
CommitDate: Fri Aug 17 22:13:18 2018 +0200
[USER32] Fix copying from WNDCLASS to WNDCLASSEX
This must be done field by field, since the alignment of the structures is different
on _WIN64
---
win32ss/user/user32/windows/class.c | 28 ++++++++++++++++++++++++++--
1 file changed, 26 insertions(+), 2 deletions(-)
diff --git a/win32ss/user/user32/windows/class.c b/win32ss/user/user32/windows/class.c
index 7208b36c10..c7da5f523c 100644
--- a/win32ss/user/user32/windows/class.c
+++ b/win32ss/user/user32/windows/class.c
@@ -1595,7 +1595,19 @@ RegisterClassA(CONST WNDCLASSA *lpWndClass)
if (lpWndClass == NULL)
return 0;
- RtlCopyMemory(&Class.style, lpWndClass, sizeof(WNDCLASSA));
+ /* These MUST be copied manually, since on 64 bit architectures the
+ alignment of the members is different between the 2 structs! */
+ Class.style = lpWndClass->style;
+ Class.lpfnWndProc = lpWndClass->lpfnWndProc;
+ Class.cbClsExtra = lpWndClass->cbClsExtra;
+ Class.cbWndExtra = lpWndClass->cbWndExtra;
+ Class.hInstance = lpWndClass->hInstance;
+ Class.hIcon = lpWndClass->hIcon;
+ Class.hCursor = lpWndClass->hCursor;
+ Class.hbrBackground = lpWndClass->hbrBackground;
+ Class.lpszMenuName = lpWndClass->lpszMenuName;
+ Class.lpszClassName = lpWndClass->lpszClassName;
+
Class.cbSize = sizeof(WNDCLASSEXA);
Class.hIconSm = NULL;
@@ -1613,7 +1625,19 @@ RegisterClassW(CONST WNDCLASSW *lpWndClass)
if (lpWndClass == NULL)
return 0;
- RtlCopyMemory(&Class.style, lpWndClass, sizeof(WNDCLASSW));
+ /* These MUST be copied manually, since on 64 bit architectures the
+ alignment of the members is different between the 2 structs! */
+ Class.style = lpWndClass->style;
+ Class.lpfnWndProc = lpWndClass->lpfnWndProc;
+ Class.cbClsExtra = lpWndClass->cbClsExtra;
+ Class.cbWndExtra = lpWndClass->cbWndExtra;
+ Class.hInstance = lpWndClass->hInstance;
+ Class.hIcon = lpWndClass->hIcon;
+ Class.hCursor = lpWndClass->hCursor;
+ Class.hbrBackground = lpWndClass->hbrBackground;
+ Class.lpszMenuName = lpWndClass->lpszMenuName;
+ Class.lpszClassName = lpWndClass->lpszClassName;
+
Class.cbSize = sizeof(WNDCLASSEXW);
Class.hIconSm = NULL;