{
BOOL rc;
UNICODE_STRING DeviceName;
+ LPDEVMODEW lpDevModeW;
+
+ lpDevModeW = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+ sizeof(DEVMODEW) + lpDevMode->dmDriverExtra);
+ if ( lpDevModeW == NULL )
+ {
+ SetLastError ( ERROR_OUTOFMEMORY );
+ return FALSE;
+ }
if ( !RtlCreateUnicodeStringFromAsciiz ( &DeviceName, (PCSZ)lpszDeviceName ) )
{
return FALSE;
}
- /*
- * NOTE: We don't need to convert between DEVMODEW and DEVMODEA because
- * only dmBitsPerPel, dmPelsWidth, dmPelsHeight, dmDisplayFlags and
- * dmDisplayFrequency fields are set.
- */
- rc = NtUserEnumDisplaySettings ( &DeviceName, iModeNum, (LPDEVMODEW)lpDevMode,
+ lpDevModeW->dmSize = sizeof(DEVMODEW);
+ lpDevModeW->dmDriverExtra = 0;
+
+ rc = NtUserEnumDisplaySettings ( &DeviceName, iModeNum, lpDevModeW,
dwFlags );
+ RosRtlDevModeW2A ( lpDevMode, lpDevModeW );
+
RtlFreeUnicodeString ( &DeviceName );
+ HeapFree ( GetProcessHeap(), 0, lpDevModeW );
return rc;
}