Zhiyi Zhang : user32: Handle NULL device parameter in EnumDisplaySettingsExW().
Alexandre Julliard
julliard at winehq.org
Wed Feb 12 16:21:07 CST 2020
Module: wine
Branch: master
Commit: 12fa0ccea50cd09c3c31e942393cf8021dbec9e7
URL: https://source.winehq.org/git/wine.git/?a=commit;h=12fa0ccea50cd09c3c31e942393cf8021dbec9e7
Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date: Tue Feb 11 16:08:38 2020 +0800
user32: Handle NULL device parameter in EnumDisplaySettingsExW().
This makes sure that user graphics drivers always have a valid device name.
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/user32/sysparams.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c
index a146f31071..e3919ad1b1 100644
--- a/dlls/user32/sysparams.c
+++ b/dlls/user32/sysparams.c
@@ -567,6 +567,24 @@ RECT get_virtual_screen_rect(void)
return info.virtual_rect;
}
+static BOOL get_primary_adapter(WCHAR *name)
+{
+ DISPLAY_DEVICEW dd;
+ DWORD i;
+
+ dd.cb = sizeof(dd);
+ for (i = 0; EnumDisplayDevicesW(NULL, i, &dd, 0); ++i)
+ {
+ if (dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE)
+ {
+ lstrcpyW(name, dd.DeviceName);
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
/* get text metrics and/or "average" char width of the specified logfont
* for the specified dc */
static void get_text_metr_size( HDC hdc, LOGFONTW *plf, TEXTMETRICW * ptm, UINT *psz)
@@ -3394,6 +3412,18 @@ BOOL WINAPI EnumDisplaySettingsExA(LPCSTR lpszDeviceName, DWORD iModeNum,
BOOL WINAPI EnumDisplaySettingsExW(LPCWSTR lpszDeviceName, DWORD iModeNum,
LPDEVMODEW lpDevMode, DWORD dwFlags)
{
+ WCHAR primary_adapter[CCHDEVICENAME];
+
+ TRACE("%s %u %p %#x\n", wine_dbgstr_w(lpszDeviceName), iModeNum, lpDevMode, dwFlags);
+
+ if (!lpszDeviceName)
+ {
+ if (!get_primary_adapter(primary_adapter))
+ return FALSE;
+
+ lpszDeviceName = primary_adapter;
+ }
+
return USER_Driver->pEnumDisplaySettingsEx(lpszDeviceName, iModeNum, lpDevMode, dwFlags);
}
More information about the wine-cvs
mailing list