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.