From bcd6556880cf3ff5c332ea5824204058ad595454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Wed, 26 Jan 2022 01:07:03 +0100 Subject: [PATCH] [USER32] Hack to make SystemParametersInfoA() not fail on NONCLIENTMETRICSA size larger than what we currently know. Vista+ NONCLIENTMETRICSA/W structure has an extra 'int iPaddedBorderWidth;' member appended. See https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-nonclientmetricsa#remarks for more information. --- win32ss/user/user32/misc/desktop.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/win32ss/user/user32/misc/desktop.c b/win32ss/user/user32/misc/desktop.c index 862ff165034..7562b51e512 100644 --- a/win32ss/user/user32/misc/desktop.c +++ b/win32ss/user/user32/misc/desktop.c @@ -189,7 +189,11 @@ RealSystemParametersInfoA(UINT uiAction, { LPNONCLIENTMETRICSA pnclma = (LPNONCLIENTMETRICSA)pvParam; NONCLIENTMETRICSW nclmw; - if(pnclma->cbSize != sizeof(NONCLIENTMETRICSA)) + + /* Only accept structures of equal or larger sizes (for + * forward-compatibility with later versions of Windows), + * but only deal with the parts we know. */ + if (pnclma->cbSize < sizeof(NONCLIENTMETRICSA)) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; @@ -220,7 +224,11 @@ RealSystemParametersInfoA(UINT uiAction, { LPNONCLIENTMETRICSA pnclma = (LPNONCLIENTMETRICSA)pvParam; NONCLIENTMETRICSW nclmw; - if(pnclma->cbSize != sizeof(NONCLIENTMETRICSA)) + + /* Only accept structures of equal or larger sizes (for + * forward-compatibility with later versions of Windows), + * but only deal with the parts we know. */ + if (pnclma->cbSize < sizeof(NONCLIENTMETRICSA)) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; -- 2.33.0.windows.2