@@ -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