- Check devmode size in NtUserChangeDisplaySettings
  - Copy memory instead of setting fields in UserEnumDisplaySettings, so we don't lost anything.

svn path=/branches/reactos-yarotows/; revision=47355
This commit is contained in:
Jérôme Gardou 2010-05-25 22:46:57 +00:00
parent 46b40c489f
commit 75e296c6be

View file

@ -648,11 +648,8 @@ NtUserEnumDisplaySettings(
cbExtra = lpDevMode->dmDriverExtra;
ProbeForWrite(lpDevMode, cbSize + cbExtra, 1);
lpDevMode->dmPelsWidth = pdm->dmPelsWidth;
lpDevMode->dmPelsHeight = pdm->dmPelsHeight;
lpDevMode->dmBitsPerPel = pdm->dmBitsPerPel;
lpDevMode->dmDisplayFrequency = pdm->dmDisplayFrequency;
lpDevMode->dmDisplayFlags = pdm->dmDisplayFlags;
/* Output what we got */
RtlCopyMemory(lpDevMode, pdm, min(cbSize, pdm->dmSize));
/* output private/extra driver data */
if (cbExtra > 0 && pdm->dmDriverExtra > 0)
@ -703,6 +700,8 @@ UserChangeDisplaySettings(
return DISP_CHANGE_BADPARAM;
}
}
else if (pdm->dmSize < FIELD_OFFSET(DEVMODEW, dmFields))
return DISP_CHANGE_FAILED;
else
dm = *pdm;