Zhiyi Zhang (@zhiyi) commented about dlls/win32u/sysparams.c:
else ret = user_driver->pGetCurrentDisplaySettings( device_name, devmode );
+ if (ret && index != ENUM_REGISTRY_SETTINGS && index != ENUM_CURRENT_SETTINGS) + { + for (ret = FALSE, mode = modes; mode && mode->dmSize && !ret; mode = NEXT_DEVMODEW(mode)) + { + if (!(flags & EDS_ROTATEDMODE) && mode->dmDisplayOrientation != devmode->dmDisplayOrientation) continue; + if ((ret = !index--)) memcpy( &devmode->dmFields, &mode->dmFields, devmode->dmSize - FIELD_OFFSET(DEVMODEW, dmFields) ); + } + } + free( modes ); + if (!ret) WARN( "Failed to query %s display settings.\n", debugstr_w(device_name) ); else TRACE( "position %dx%d, resolution %ux%u, frequency %u, depth %u, orientation %#x.\n", devmode->dmPosition.x, devmode->dmPosition.y, devmode->dmPelsWidth, devmode->dmPelsHeight, devmode->dmDisplayFrequency, devmode->dmBitsPerPel, devmode->dmDisplayOrientation );
This patch introduced a behavior change which is that now the last error is not set when index is larger than available modes. I haven't checked if Windows sets the error code but this looks worthy of a recheck. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/551#note_7850