Skip to content

Commit 9f21cc3

Browse files
committed
[WIN32SS:ENG] Do not allocate 0 bytes if no monitor is reported
Addendum to 2f00ca4
1 parent 4534537 commit 9f21cc3

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

win32ss/gdi/eng/device.c

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -616,23 +616,28 @@ EngpUpdateMonitorDevices(
616616
pGraphicsDevice->pvMonDev = NULL;
617617
pGraphicsDevice->dwMonCnt = 0;
618618
}
619-
pGraphicsDevice->pvMonDev = ExAllocatePoolZero(PagedPool,
620-
monitorCount * sizeof(VIDEO_MONITOR_DEVICE),
621-
GDITAG_GDEVICE);
622-
if (!pGraphicsDevice->pvMonDev)
623-
{
624-
for (i = 0; pMonitorDevices[i].pdo; ++i)
625-
ObDereferenceObject(pMonitorDevices[i].pdo);
626-
ExFreePool(pMonitorDevices);
627-
return STATUS_INSUFFICIENT_RESOURCES;
628-
}
629619

630-
/* Copy data */
631-
for (i = 0; i < monitorCount; i++)
620+
if (monitorCount > 0)
632621
{
633-
TRACE("%S\\Monitor%u: PDO %p HwID %u\n", pGraphicsDevice->szWinDeviceName, i, pMonitorDevices[i].pdo, pMonitorDevices[i].HwID);
634-
pGraphicsDevice->pvMonDev[pGraphicsDevice->dwMonCnt++] = pMonitorDevices[i];
622+
pGraphicsDevice->pvMonDev = ExAllocatePoolZero(PagedPool,
623+
monitorCount * sizeof(VIDEO_MONITOR_DEVICE),
624+
GDITAG_GDEVICE);
625+
if (!pGraphicsDevice->pvMonDev)
626+
{
627+
for (i = 0; pMonitorDevices[i].pdo; ++i)
628+
ObDereferenceObject(pMonitorDevices[i].pdo);
629+
ExFreePool(pMonitorDevices);
630+
return STATUS_INSUFFICIENT_RESOURCES;
631+
}
632+
633+
/* Copy data */
634+
for (i = 0; i < monitorCount; i++)
635+
{
636+
TRACE("%S\\Monitor%u: PDO %p HwID %u\n", pGraphicsDevice->szWinDeviceName, i, pMonitorDevices[i].pdo, pMonitorDevices[i].HwID);
637+
pGraphicsDevice->pvMonDev[pGraphicsDevice->dwMonCnt++] = pMonitorDevices[i];
638+
}
635639
}
640+
636641
ExFreePool(pMonitorDevices);
637642
return STATUS_SUCCESS;
638643
}

0 commit comments

Comments
 (0)