fix memmory coruption in EnumDisplaySettingsExA
do not alloc memmory with heap.
Modified: trunk/reactos/lib/user32/misc/display.c
_____
Modified: trunk/reactos/lib/user32/misc/display.c
--- trunk/reactos/lib/user32/misc/display.c 2005-05-27 00:32:24 UTC
(rev 15541)
+++ trunk/reactos/lib/user32/misc/display.c 2005-05-27 14:22:06 UTC
(rev 15542)
@@ -200,33 +200,25 @@
{
BOOL rc;
UNICODE_STRING DeviceName;
- LPDEVMODEW lpDevModeW;
+ DEVMODEW lpDevModeW;
- lpDevModeW = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
- sizeof(DEVMODEW) + lpDevMode->dmDriverExtra);
- if ( lpDevModeW == NULL )
- {
- SetLastError ( ERROR_OUTOFMEMORY );
- return FALSE;
- }
-
if ( !RtlCreateUnicodeStringFromAsciiz ( &DeviceName,
(PCSZ)lpszDeviceName ) )
{
SetLastError ( ERROR_OUTOFMEMORY );
return FALSE;
}
- lpDevModeW->dmSize = sizeof(DEVMODEW);
- lpDevModeW->dmDriverExtra = 0;
-
- rc = NtUserEnumDisplaySettings ( &DeviceName, iModeNum, lpDevModeW,
+ memset(&lpDevModeW,0,sizeof(DEVMODEW));
+ lpDevModeW.dmSize = sizeof(DEVMODEW);
+
+ rc = NtUserEnumDisplaySettings ( &DeviceName, iModeNum, &lpDevModeW,
dwFlags );
- RosRtlDevModeW2A ( lpDevMode, lpDevModeW );
+ RosRtlDevModeW2A ( lpDevMode, &lpDevModeW );
RtlFreeUnicodeString ( &DeviceName );
- HeapFree ( GetProcessHeap(), 0, lpDevModeW );
+
return rc;
}