[PATCH 1/2] user32: Specify enumerator when calling SetupDiGetClassDevsW.
Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com> --- dlls/user32/sysparams.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c index 12225a6551..83450eee36 100644 --- a/dlls/user32/sysparams.c +++ b/dlls/user32/sysparams.c @@ -283,7 +283,8 @@ static const WCHAR BACKSLASH[] = {'\\',0}; static const WCHAR DRIVER_DESC[] = {'D','r','i','v','e','r','D','e','s','c',0}; static const WCHAR STATE_FLAGS[] = {'S','t','a','t','e','F','l','a','g','s',0}; static const WCHAR GPU_ID[] = {'G','P','U','I','D',0}; -static const WCHAR DISPLAY[] = {'\\','\\','.','\\','D','I','S','P','L','A','Y'}; +static const WCHAR DISPLAY[] = {'D','I','S','P','L','A','Y',0}; +static const WCHAR ADAPTER_PREFIX[] = {'\\','\\','.','\\','D','I','S','P','L','A','Y'}; static const WCHAR MONITOR_ID_VALUE_FMT[] = {'M','o','n','i','t','o','r','I','D','%','d',0}; static const WCHAR VIDEO_KEY[] = {'H','A','R','D','W','A','R','E','\\', 'D','E','V','I','C','E','M','A','P','\\', @@ -3748,7 +3749,7 @@ BOOL CDECL nulldrv_GetMonitorInfo( HMONITOR handle, MONITORINFO *info ) /* Use SetupAPI to get monitors */ mutex = get_display_device_init_mutex(); - devinfo = SetupDiGetClassDevsW( &GUID_DEVCLASS_MONITOR, NULL, NULL, 0 ); + devinfo = SetupDiGetClassDevsW( &GUID_DEVCLASS_MONITOR, DISPLAY, NULL, DIGCF_PRESENT ); if (SetupDiEnumDeviceInfo(devinfo, (DWORD)(UINT_PTR)handle - 1, &device_data)) { SetupDiGetDevicePropertyW( devinfo, &device_data, &WINE_DEVPROPKEY_MONITOR_RCMONITOR, &type, @@ -3892,7 +3893,7 @@ BOOL CDECL nulldrv_EnumDisplayMonitors( HDC hdc, RECT *rect, MONITORENUMPROC pro if (GetUserObjectInformationA( winstation, UOI_FLAGS, &flags, sizeof(flags), NULL ) && (flags.dwFlags & WSF_VISIBLE)) { mutex = get_display_device_init_mutex(); - devinfo = SetupDiGetClassDevsW( &GUID_DEVCLASS_MONITOR, NULL, NULL, 0 ); + devinfo = SetupDiGetClassDevsW( &GUID_DEVCLASS_MONITOR, DISPLAY, NULL, DIGCF_PRESENT ); while (SetupDiEnumDeviceInfo( devinfo, i++, &device_data )) { /* Inactive monitors don't get enumerated */ @@ -4062,10 +4063,10 @@ BOOL WINAPI EnumDisplayDevicesW( LPCWSTR device, DWORD index, DISPLAY_DEVICEW *i else { /* Check adapter name */ - if (strncmpiW( device, DISPLAY, ARRAY_SIZE(DISPLAY) )) + if (strncmpiW( device, ADAPTER_PREFIX, ARRAY_SIZE(ADAPTER_PREFIX) )) goto done; - adapter_index = strtolW( device + ARRAY_SIZE(DISPLAY), NULL, 10 ); + adapter_index = strtolW( device + ARRAY_SIZE(ADAPTER_PREFIX), NULL, 10 ); sprintfW( key_nameW, VIDEO_VALUE_FMT, adapter_index - 1 ); size = sizeof(bufferW); -- 2.20.1
Hi, While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check? Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=54280 Your paranoid android. === debian9 (32 bit report) === user32: msg.c:8713: Test failed: WaitForSingleObject failed 102 msg.c:8719: Test failed: destroy child on thread exit: 0: the msg 0x0082 was expected, but got msg 0x000f instead msg.c:8719: Test failed: destroy child on thread exit: 1: the msg 0x000f was expected, but got msg 0x0014 instead msg.c:8719: Test failed: destroy child on thread exit: 2: the msg sequence is not complete: expected 0014 - actual 0000
participants (2)
-
Marvin -
Zhiyi Zhang