mirror of
https://github.com/reactos/reactos.git
synced 2025-04-21 12:40:33 +00:00
-fix a bug in GetDisplayNumberFromDeviceName
-don't overwrite memory in IntEnumDisplaySettings svn path=/trunk/; revision=28934
This commit is contained in:
parent
6a0d3658f6
commit
30dc779d1c
1 changed files with 13 additions and 28 deletions
|
@ -2736,7 +2736,7 @@ GetDisplayNumberFromDeviceName(
|
||||||
|
|
||||||
*DisplayNumber = ((GDIDEVICE *)pDC->GDIDevice)->DisplayNumber;
|
*DisplayNumber = ((GDIDEVICE *)pDC->GDIDevice)->DisplayNumber;
|
||||||
|
|
||||||
DC_UnlockDc(DesktopHDC);
|
DC_UnlockDc(pDC);
|
||||||
UserReleaseDC(DesktopObject, DesktopHDC, FALSE);
|
UserReleaseDC(DesktopObject, DesktopHDC, FALSE);
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
@ -2787,7 +2787,6 @@ IntEnumDisplaySettings(
|
||||||
static UNICODE_STRING CachedDeviceName;
|
static UNICODE_STRING CachedDeviceName;
|
||||||
PDEVMODEW CachedMode = NULL;
|
PDEVMODEW CachedMode = NULL;
|
||||||
DEVMODEW DevMode;
|
DEVMODEW DevMode;
|
||||||
INT Size, OldSize;
|
|
||||||
ULONG DisplayNumber;
|
ULONG DisplayNumber;
|
||||||
|
|
||||||
if (!NT_SUCCESS(GetDisplayNumberFromDeviceName(pDeviceName, &DisplayNumber)))
|
if (!NT_SUCCESS(GetDisplayNumberFromDeviceName(pDeviceName, &DisplayNumber)))
|
||||||
|
@ -2884,7 +2883,7 @@ IntEnumDisplaySettings(
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Call DDI driver's EnableDriver function */
|
/* Call DDI driver's EnableDriver function */
|
||||||
RtlZeroMemory(&DrvEnableData, sizeof (DrvEnableData));
|
RtlZeroMemory(&DrvEnableData, sizeof(DrvEnableData));
|
||||||
|
|
||||||
if (!GDEnableDriver(DDI_DRIVER_VERSION_NT5_01, sizeof (DrvEnableData), &DrvEnableData))
|
if (!GDEnableDriver(DDI_DRIVER_VERSION_NT5_01, sizeof (DrvEnableData), &DrvEnableData))
|
||||||
{
|
{
|
||||||
|
@ -2999,20 +2998,9 @@ IntEnumDisplaySettings(
|
||||||
|
|
||||||
ASSERT(CachedMode != NULL);
|
ASSERT(CachedMode != NULL);
|
||||||
|
|
||||||
Size = OldSize = pDevMode->dmSize;
|
RtlCopyMemory(pDevMode, CachedMode, pDevMode->dmSize);
|
||||||
if (Size > CachedMode->dmSize)
|
RtlZeroMemory(pDevMode + pDevMode->dmSize, pDevMode->dmDriverExtra);
|
||||||
Size = CachedMode->dmSize;
|
RtlCopyMemory(pDevMode + pDevMode->dmSize, CachedMode + CachedMode->dmSize, min(pDevMode->dmDriverExtra, CachedMode->dmDriverExtra));
|
||||||
RtlCopyMemory(pDevMode, CachedMode, Size);
|
|
||||||
RtlZeroMemory((PCHAR)pDevMode + Size, OldSize - Size);
|
|
||||||
pDevMode->dmSize = OldSize;
|
|
||||||
|
|
||||||
Size = OldSize = pDevMode->dmDriverExtra;
|
|
||||||
if (Size > CachedMode->dmDriverExtra)
|
|
||||||
Size = CachedMode->dmDriverExtra;
|
|
||||||
RtlCopyMemory((PCHAR)pDevMode + pDevMode->dmSize,
|
|
||||||
(PCHAR)CachedMode + CachedMode->dmSize, Size);
|
|
||||||
RtlZeroMemory((PCHAR)pDevMode + pDevMode->dmSize + Size, OldSize - Size);
|
|
||||||
pDevMode->dmDriverExtra = OldSize;
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -3162,7 +3150,7 @@ IntChangeDisplaySettings(
|
||||||
LONG Ret=0;
|
LONG Ret=0;
|
||||||
NTSTATUS Status ;
|
NTSTATUS Status ;
|
||||||
|
|
||||||
DPRINT1("display flag : %x\n",dwflags);
|
DPRINT1("display flags : %x\n",dwflags);
|
||||||
|
|
||||||
if ((dwflags & CDS_UPDATEREGISTRY) == CDS_UPDATEREGISTRY)
|
if ((dwflags & CDS_UPDATEREGISTRY) == CDS_UPDATEREGISTRY)
|
||||||
{
|
{
|
||||||
|
@ -3185,7 +3173,7 @@ IntChangeDisplaySettings(
|
||||||
if (dwflags == 0)
|
if (dwflags == 0)
|
||||||
{
|
{
|
||||||
/* Dynamically change graphics mode */
|
/* Dynamically change graphics mode */
|
||||||
DPRINT1("flag 0 UNIMPLEMENT \n");
|
DPRINT1("flag 0 UNIMPLEMENTED\n");
|
||||||
return DISP_CHANGE_FAILED;
|
return DISP_CHANGE_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3193,7 +3181,7 @@ IntChangeDisplaySettings(
|
||||||
{
|
{
|
||||||
/* Test reslution */
|
/* Test reslution */
|
||||||
dwflags &= ~CDS_TEST;
|
dwflags &= ~CDS_TEST;
|
||||||
DPRINT1("flag CDS_TEST UNIMPLEMENT");
|
DPRINT1("flag CDS_TEST UNIMPLEMENTED\n");
|
||||||
Ret = DISP_CHANGE_FAILED;
|
Ret = DISP_CHANGE_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3202,15 +3190,12 @@ IntChangeDisplaySettings(
|
||||||
DEVMODEW lpDevMode;
|
DEVMODEW lpDevMode;
|
||||||
/* Full Screen */
|
/* Full Screen */
|
||||||
dwflags &= ~CDS_FULLSCREEN;
|
dwflags &= ~CDS_FULLSCREEN;
|
||||||
DPRINT1("flag CDS_FULLSCREEN partially implemented");
|
DPRINT1("flag CDS_FULLSCREEN partially implemented\n");
|
||||||
Ret = DISP_CHANGE_FAILED;
|
Ret = DISP_CHANGE_FAILED;
|
||||||
|
|
||||||
lpDevMode.dmBitsPerPel =0;
|
RtlZeroMemory(&lpDevMode, sizeof(DEVMODEW));
|
||||||
lpDevMode.dmPelsWidth =0;
|
|
||||||
lpDevMode.dmPelsHeight =0;
|
|
||||||
lpDevMode.dmDriverExtra =0;
|
|
||||||
|
|
||||||
lpDevMode.dmSize = sizeof(DEVMODEW);
|
lpDevMode.dmSize = sizeof(DEVMODEW);
|
||||||
|
|
||||||
if (!IntEnumDisplaySettings(pDeviceName, ENUM_CURRENT_SETTINGS, &lpDevMode, 0))
|
if (!IntEnumDisplaySettings(pDeviceName, ENUM_CURRENT_SETTINGS, &lpDevMode, 0))
|
||||||
return DISP_CHANGE_FAILED;
|
return DISP_CHANGE_FAILED;
|
||||||
|
|
||||||
|
@ -3231,7 +3216,7 @@ IntChangeDisplaySettings(
|
||||||
Ret=DISP_CHANGE_BADPARAM;
|
Ret=DISP_CHANGE_BADPARAM;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DPRINT1("flag CDS_VIDEOPARAMETERS UNIMPLEMENT");
|
DPRINT1("flag CDS_VIDEOPARAMETERS UNIMPLEMENTED\n");
|
||||||
Ret = DISP_CHANGE_FAILED;
|
Ret = DISP_CHANGE_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3247,7 +3232,7 @@ IntChangeDisplaySettings(
|
||||||
HANDLE DevInstRegKey;
|
HANDLE DevInstRegKey;
|
||||||
ULONG NewValue;
|
ULONG NewValue;
|
||||||
|
|
||||||
DPRINT1("set CDS_UPDATEREGISTRY \n");
|
DPRINT1("set CDS_UPDATEREGISTRY\n");
|
||||||
|
|
||||||
dwflags &= ~CDS_UPDATEREGISTRY;
|
dwflags &= ~CDS_UPDATEREGISTRY;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue